2016-09-13 22 views

Trả lời

11

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.

+0

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

7

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.

+0

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

+0

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 đó. –

+0

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

Các vấn đề liên quan