Có hai thùng chứa A và B. Khi container A bắt đầu, một quá trình sẽ được thực thi, khi đó thùng chứa sẽ dừng lại. Container B chỉ là một ứng dụng web (nói expressjs). Có thể khởi động A từ container B không?Có thể bắt đầu một container đã dừng từ một container khác
Trả lời
Có thể cấp quyền truy cập vùng chứa vào đế lót để có thể xuất hiện các vùng chứa khác trên máy chủ lưu trữ của bạn. Bạn làm điều này bằng cách phơi bày các ổ cắm Docker bên trong container, ví dụ:
docker run -v /var/run/docker.sock:/var/run/docker.sock --name containerB myimage ...
Bây giờ, nếu bạn có docker
khách hàng có sẵn bên trong container, bạn sẽ có thể kiểm soát các daemon Docker trên máy chủ của bạn và sử dụng để đẻ trứng của bạn "container A". Trước khi thử phương pháp này, bạn nên biết các cân nhắc bảo mật: quyền truy cập vào docker giống như việc truy cập root
trên máy chủ, điều đó có nghĩa là nếu ứng dụng web của bạn có thỏa hiệp từ xa, bạn đã truyền chìa khóa cho lưu trữ cho những kẻ tấn công. Điều này được mô tả đầy đủ hơn in this article.
Có thể bằng cách lắp ổ cắm đế.
Vùng chứa A
Nó sẽ in thời gian tới bản đồ (và nhật ký của nó) và thoát.
docker run --name contA ubuntu date
container B
Bí quyết là để gắn kết ổ cắm Docker của máy chủ sau đó cài đặt client Docker trên thùng sơn. Sau đó nó sẽ tương tác với daemon giống như khi bạn đang sử dụng docker từ máy chủ. Khi docker được cài đặt, nó chỉ đơn giản khởi động lại container A mỗi 5 giây.
docker run --name contB -v /var/run/docker.sock:/var/run/docker.sock ubuntu bash -c "
apt-get update && apt-get install -y curl &&
curl -sSL https://get.docker.com/ | sh &&
watch --interval 5 docker restart contA"
Bạn có thể thấy rằng Conta đang được gọi bằng cách nhìn vào các bản ghi của nó
docker logs contA
Điều đó nói rằng, Docker thực sự có nghĩa là cho các dịch vụ chạy dài. Có một số thảo luận về vấn đề github Docker về việc chỉ định các dịch vụ "công việc" ngắn ngủi cho những thứ như bảo trì, công việc cron, vv, nhưng không có gì đã được quyết định, ít mã hóa hơn nhiều. Vì vậy, cách tốt nhất là xây dựng hệ thống của bạn để các thùng chứa luôn hoạt động và ở lại.
Tôi không đăng câu trả lời ngay lập tức để @larsks xuất hiện trước. Tôi sẽ giữ nó ở đây anyway vì nó có mã bạn có thể thấy hữu ích. – Alkaline
Nó hoạt động. Tôi không chắc chắn rằng nó là một ý tưởng tốt để cài đặt một docker bên trong một docker, đó sẽ là một câu hỏi khác. Vì @larsks xuất hiện trước, tôi chỉ cần đánh dấu vào đó. –
Nó hoạt động nhưng mã không rõ ràng với tôi. Tôi bối rối bởi việc sử dụng https://get.docker.com/. Dù sao, người ta phải cài đặt docker-ce bên trong container docker (apt-get install docker-ce) và sau đó sử dụng "docker restart containsername" để khởi động lại một docker container khác – Somum
- 1. Bắt đầu từ một Shell trong Docker Alpine container
- 2. Dừng container docker từ bên trong
- 3. Bắt đầu một chuỗi đã dừng?
- 4. Cách dừng cụm động cơ gcloud container
- 5. Không thể bắt đầu Docker trên Lubuntu - "không thể bắt đầu container: lỗi định dạng exec"
- 6. Truy cập từ một container Docker
- 7. bắt đầu docker-soạn "ERROR: Không có container để bắt đầu"
- 8. Khởi tạo một container với phạm vi iterator của container với loại khác nhau
- 9. fig up: docker container bắt đầu đồng bộ hóa
- 10. Bắt đầu một bản sao EC2 đã dừng bằng Boto
- 11. jsp container vs servlet container
- 12. Docker không thể bắt đầu container ... cpu.shares: không có tập tin hoặc thư mục
- 13. Chạy docker bên trong một container docker?
- 14. C++ "di chuyển từ" container
- 15. Làm thế nào để bắt đầu một vỏ mongodb trong container docker?
- 16. Nhúng Jetty như một Container Servlet
- 17. Lặp lại một container của unique_ptr
- 18. C++ Là một std :: string a container?
- 19. Eclipse đã dừng ngẫu nhiên bắt đầu từ
- 20. Bạn có thể đăng ký một thể hiện hiện tại của một loại trong Windsor Container?
- 21. Cách bắt đầu chủ đề đã dừng
- 22. Bắt đầu/dừng một ứng dụng web từ chính nó?
- 23. Thay đổi thứ tự của một Container
- 24. Nginx SSL bên trong một container Docker
- 25. Làm thế nào khởi động lại một container Docker ngừng
- 26. Jboss Java EE container và một ExecutorService
- 27. Docker: Container tiếp tục khởi động lại một lần nữa
- 28. C++ xác định nếu một container có :: tìm()
- 29. Làm thế nào tôi có thể Dừng/bắt đầu/Tạm dừng một @JmsListener (cách sạch)
- 30. Làm thế nào để giữ một thể hiện của một Container Dependency Injection (PHP)
Tôi đã làm theo mẹo này. Và sau đó tôi đã sao chép bằng tay 'docker' và' docker-compose' vào vùng chứa. 'Docker-compose' chạy tốt bên trong vùng chứa. Tuy nhiên, tôi cần phải sao chép '/ usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1' từ máy chủ của tôi vào thùng chứa và sau đó bên trong vùng chứa, tôi tạo một liên kết tượng trưng bằng' ln -sf/usr/lib /x86_64-linux-gnu/libltdl.so.7.3.1/usr/lib/x86_64-linux-gnu/libltdl.so.7'. Bên trong container: 'ldd/usr/bin/docker' tất cả các libs đã được giải quyết và tôi có thể chạy' docker' và 'docker-cocmpose' bên trong container. – ifelsemonkey