Tôi đang chạy Jenkins bên trong vùng chứa Docker. Tôi tự hỏi nếu nó ok cho container Jenkins cũng là một máy chủ Docker? Những gì tôi đang nghĩ đến là để bắt đầu một container docker mới cho mỗi xây dựng thử nghiệm tích hợp từ bên trong Jenkins (để bắt đầu cơ sở dữ liệu, môi giới tin nhắn, vv). Các thùng chứa do đó sẽ được tắt sau khi kiểm tra tích hợp được hoàn thành. Có lý do nào để tránh chạy các thùng chứa docker từ bên trong một thùng chứa docker khác theo cách này không?Có thể chạy docker từ bên trong docker không?
Trả lời
Chạy bộ điều khiển bên trong Docker (a.k.a. dind), trong khi có thể, nên tránh, nếu có thể. (Nguồn được cung cấp bên dưới.) Thay vào đó, bạn muốn thiết lập cách để vùng chứa chính của bạn sản xuất và giao tiếp với các vùng chứa anh chị em.
Jérôme Petazzoni - tác giả của đối tượng địa lý làm cho Docker có thể chạy bên trong vùng chứa Docker - thực sự đã viết a blog post saying not to do it. Trường hợp sử dụng mà ông mô tả phù hợp với trường hợp sử dụng chính xác của OP đối với thùng chứa CI Docker cần chạy các công việc bên trong các vùng chứa Docker khác.
Petazzoni liệt kê hai lý do tại sao dind là phiền hà:
- Nó không hợp tác tốt với Linux Security Modules (LSM).
- Nó tạo ra sự không phù hợp trong các hệ thống tệp gây ra sự cố cho các vùng chứa được tạo bên trong vùng chứa chính.
Từ đó bài viết trên blog, ông mô tả sự thay thế sau,
[The] Cách đơn giản nhất là chỉ cần tiếp xúc với ổ cắm Docker để chứa CI của bạn, bằng cách ràng buộc tháo lắp nó với
-v
cờ.một cách đơn giản, khi bạn bắt đầu chứa CI của bạn (Jenkins hoặc khác), thay vì hack một cái gì đó cùng với Docker-in-Docker, bắt đầu nó với:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
Bây giờ chứa này sẽ có quyền truy cập vào các Docker socket, và do đó sẽ có thể bắt đầu container. Ngoại trừ việc thay vì bắt đầu container "con", nó sẽ bắt đầu "anh chị em" container.
Tôi đã trả lời câu hỏi tương tự trước đây trên how to run a Docker container inside Docker.
Để chạy docker bên trong docker chắc chắn là có thể. Điều chính là bạn
run
thùng chứa bên ngoài với extra privileges (bắt đầu bằng--privileged=true
) và sau đó cài đặt đế trong ngăn chứa đó.Kiểm tra bài đăng trên blog này để biết thêm thông tin: Docker-in-Docker.
Một trường hợp sử dụng tiềm năng cho trường hợp này được mô tả trong this entry. Blog mô tả cách xây dựng các vùng chứa docker trong một thùng chứa Docker của Jenkins.
Tuy nhiên, Docker bên trong Docker không phải là phương pháp được khuyến nghị để giải quyết loại sự cố này. Thay vào đó, phương pháp được đề xuất là tạo các vùng chứa "anh chị em" là described in this post
Vì vậy, chạy Docker bên trong Docker được nhiều người coi là một giải pháp tốt cho loại sự cố này. Bây giờ, xu hướng là sử dụng "anh chị em" container thay thế. Xem the answer by @predmijat on this page để biết thêm thông tin.
Xem nhận xét bên dưới về cách tránh trình cắm trong docker. –
- 1. Chạy docker bên trong một container docker?
- 2. Có thể chạy FreeBSD bên trong Docker không?
- 3. Có thể chạy docker không?
- 4. docker bên trong docker container
- 5. Docker xây dựng không có mạng, nhưng Docker chạy có
- 6. Dừng container docker từ bên trong
- 7. chạy "docker run" từ crontab
- 8. Tôi có thể chạy Docker trong Máy ảo không?
- 9. Docker PostgreSQL - Chữ viết trong /docker-entrypoint-initdb.d không chạy
- 10. Có thể chạy Kinect V2 bên trong thùng chứa Docker không?
- 11. Không thể truy cập vùng chứa docker-compose được tạo bên trong docker
- 12. Có thể chạy kubernetes như một thùng chứa docker không?
- 13. Jenkins trong thùng chứa Docker (đường ống chạy docker)
- 14. S3fs không thể gắn bên trong thùng chứa docker?
- 15. Vùng chứa Docker không chạy
- 16. Vùng chứa Docker có thể chạy trong Windows IoT Core
- 17. không có internet bên trong dịch vụ docker-compose
- 18. là nó có thể chạy virtualbox bên trong một container docker
- 19. Không thể chạy lệnh Curl bên trong Vùng chứa Docker của tôi
- 20. Jenkins: chạy Docker lệnh trên một nô lệ Docker
- 21. Chạy Gitlab Docker
- 22. Có thể thay đổi ngày trong thùng chứa docker không?
- 23. Nginx SSL bên trong một container Docker
- 24. đại lý datadog không thể truy cập từ bên trong docker container
- 25. Chạy docker-compose với mysql và thùng chứa docker riêng
- 26. Không thể tạo Docker mạng
- 27. Không thể kết nối với Elasticsearch với PHP bên Docker
- 28. Bên trong thùng chứa Docker, cronjobs không được thực hiện
- 29. Mac OS X sudo docker Không thể kết nối với daemon Docker. Docker daemon có chạy trên máy chủ này không?
- 30. Permission denied bên Docker chứa
Khả năng khác là gắn ổ cắm đế từ máy chủ dưới dạng ổ đĩa trong vùng chứa. Điều đó cho phép bạn tạo các thùng chứa "anh chị em" và có lợi thế là có thể sử dụng lại bộ nhớ cache. –
Tôi đã tìm thấy rằng khi sử dụng docker socket từ máy chủ trong trường hợp tôi muốn gắn kết khối lượng bên ngoài, nó cần thiết để thiết lập đường dẫn khối lượng tương đối với host như là nơi docker daemon chạy. Thiết lập nó tương đối so với container bắt đầu container sẽ không nhất thiết phải làm việc trừ khi các đường dẫn trùng với nhau. –