2014-10-07 68 views
25

Tôi đang sử dụng vùng chứa docker để xây dựng và triển khai phần mềm của mình cho một bộ sưu tập của ec2. Trong kịch bản triển khai, tôi xây dựng phần mềm của tôi và sau đó đóng gói nó trong một hình ảnh docker. Hình ảnh được đẩy vào sổ đăng ký riêng của tôi, được kéo bởi sản phẩm ec2 của tôi và sau đó chạy. Vì vậy, về cơ bản tôi sẽ cần phải chạy docker trong một container docker.Chạy docker bên trong một container docker?

Vấn đề là tôi thực sự không thể bắt đầu docker trên vùng chứa của mình. Nếu tôi cố gắng

service docker start 

tôi nhận được

bash: service: command not found 

Và nếu tôi cố gắng

docker -d 

tôi nhận được

2014/10/07 15:54:35 docker daemon: 0.11.1-dev 02d20af/0.11.1; execdriver: native; graphdriver: 
[e2feb6f9] +job serveapi(unix:///var/run/docker.sock) 
[e2feb6f9] +job initserver() 
[e2feb6f9.initserver()] Creating server 
2014/10/07 15:54:35 Listening for HTTP on unix (/var/run/docker.sock) 
[error] attach_loopback.go:42 There are no more loopback device available. 
loopback mounting failed 
[e2feb6f9] -job initserver() = ERR (1) 
2014/10/07 15:54:35 loopback mounting failed 

Lệnh dịch vụ không tồn tại trên thùng Docker vì vậy tôi không thể bắt đầu docker. Tôi không chắc những gì tôi nên làm bây giờ để bắt đầu docker vì vậy tôi là một chút bị mắc kẹt ở đây, bất kỳ trợ giúp được đánh giá cao.

Một chút biết thêm thông tin

máy chủ đang chạy fedora 20 (cuối cùng sẽ được chạy amazon linux trên EC2)

Docker container được chạy centos 7.0

chủ đang chạy Docker phiên bản 1.2. 0, xây dựng fa7b24f/1.2.0

container đang chạy Docker-0.11.1-22.el7.centos.x86_64

+0

Có một lý do để chạy centos/Docker 0.11 trong container? Nếu nó dành riêng cho chạy Docker bạn có thể sử dụng CoreOS hoặc một cái gì đó tương tự. – naneau

+0

Thùng chứa centos không hoàn toàn dành riêng cho việc chạy docker, hầu như tất cả các nhiệm vụ của nó liên quan đến việc xây dựng và kiểm thử phần mềm. Tất cả mọi thứ chúng tôi làm được biết là chạy thành công trên centos vì vậy chúng tôi đã hy vọng để có thể tiếp tục sử dụng centos trong một container. –

+1

Tôi nghĩ rằng "Docker way" vẫn sẽ được quay lên một container riêng biệt. Các thùng chứa thực sự phù hợp với việc chạy một ứng dụng duy nhất. Chúng không có nghĩa là thay thế các tác vụ được thực hiện tốt hơn bởi một máy ảo. Nếu bạn có một ngăn xếp phức tạp có nhiều nhiệm vụ, nó có thể giúp lan truyền một số nhiệm vụ đó để tách các thùng chứa. Một ví dụ về nhiệm vụ như vậy sẽ chạy các vùng chứa Docker khác. – naneau

Trả lời

37

Làm thế nào về không chạy 'docker bên trong docker' và chạy docker trên máy chủ của bạn, nhưng từ bên trong container docker của bạn? Chỉ cần gắn docker.sock của bạn và Docker nhị phân:

docker run -v /var/run/docker.sock:/run/docker.sock -v $(which docker):/bin/docker [your image]

https://github.com/sameersbn/docker-gitlab sử dụng phương pháp này để quay lên container Docker, hãy nhìn vào hình ảnh này.

Bạn cũng có thể có một cái nhìn tại địa chỉ: https://registry.hub.docker.com/u/mattgruter/doubledocker/

UPDATE trên Tháng Bảy 2016

Phương pháp mới nhất là sử dụng docker:dind hình ảnh, như mô tả ở đây: https://hub.docker.com/_/docker/

tóm tắt ngắn:

$ docker run --privileged --name some-docker -d docker:dind

.210

và sau đó: $ docker run --rm --link some-docker:docker docker info

+1

-v $ (mà docker):/bin/docker lừa làm việc cho tôi khi tôi đang chạy ubuntu dựa trên hình ảnh trên ubuntu máy chủ, nhưng đã không làm việc trên máy chủ gentoo - vì vậy tôi thích cài đặt docker trong container và chỉ để bản đồ ổ cắm tập tin – ISanych

+1

Điểm lắp ổ cắm docker bên trong thùng chứa khi _everything_ đang xảy ra trên máy chủ của bạn chứ không phải trong vùng chứa. – SummerBreeze

+0

Vâng, chủ yếu là bởi vì nó không phải là 'mọi thứ' xảy ra trên máy chủ. Xem hình ảnh docker-gitlab làm ví dụ. – cthulhu

3

Trong khi ở hầu hết các trường hợp sau đây tôi sẽ đề nghị trả lời @ Cthulhu và không chạy "Docker trong Docker", trong các trường hợp khi bạn phải (ví dụmột bộ kiểm tra mà kiểm tra đối với nhiều phiên bản Docker), sử dụng sau để tạo thêm các thiết bị loopback:

#!/bin/bash 

for i in {0..6} 
do 
    mknod -m0660 /dev/loop$i b 7 $i 
done 

(Trích từ thread cho Docker Issue #7058)

2

Bạn chỉ có thể chạy Docker bên trong container Docker sử dụng dind. Hãy thử hình ảnh này từ Jerome, như sau:

docker run --privileged -t -i jpetazzo/dind

Kiểm tra trang này để biết thêm chi tiết:
https://github.com/jpetazzo/dind

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