2015-09-05 28 views
6

Tôi đang sử dụng docker-compose để phát triển . Trong quá trình này, tôi thường cần phải xây dựng 5 container (1 cho web-server và 4 container cho postgres, redis, mongo, vv). Thùng chứa máy chủ web được định cấu hình để bao gồm các liên kết cho các vùng chứa khác, nó có các vũng ENV riêng, được gắn khối lượng từ máy chủ phát triển.Xây dựng vùng chứa với docker-compose, nhưng chạy/etc/bash với tùy chọn -it sau?

Vấn đề là tôi không cần vùng chứa web để chạy chính máy chủ. Istead này tôi cần phải thực hiện /etc/bash với -it tùy chọn bên trong container web sau khi tất cả các container phụ thuộc được tạo ra. Đó là lý do, dockerfile tôi cho web chứa kết thúc với:

CMD /bin/true 

Rõ ràng, trong bao bì như vậy sẽ không được chạy, vì vậy tôi không thể sử dụng smth như

docker exec -it <CONTAINER ID> /bin/bash 

để "enter" nó và chạy node app.js hoặc một số nhiệm vụ khác.

Bất kỳ cách nào để tạo vùng chứa bằng soạn thảo như một phần của tệp docker-compose.yml, nhưng chạy/etc/bash với tùy chọn -it sau?

BTW, chắc chắn tôi có thể tự bắt đầu một web chứa riêng biệt với

docker run \ 
--link postgres 
--link ... 
-e "NODE_ENV=development" \ 
-e ... \ 
... 
... 
.. 

nhưng nó trường hợp này tôi cần phải thêm tất cả các liên kết, env VAR, khối lượng, vv như argumets mọi Tôi sẽ phát triển một ứng dụng.

+0

Bạn có thể giải thích thêm về trường hợp sử dụng/quy trình làm việc của mình không? Có vẻ phức tạp không cần thiết? – johnharris85

Trả lời

12

Có vẻ như docker-compose run sẽ trở thành bạn của bạn. Từ số docker compose docs:

Chạy lệnh một lần đối với dịch vụ. Ví dụ, lệnh sau bắt đầu dịch vụ web và chạy bash làm lệnh của nó.

$ docker-compose run web bash

Lệnh docker-compose run <service-name> cũng đảm bảo rằng tất cả các container yêu cầu (ví dụ những người cung cấp khối lượng và liên kết) sẽ được bắt đầu trước khi container <service-name>, nếu chúng chưa được chạy.

Trong trường hợp bạn sử dụng bất kỳ ánh xạ cổng nào, bạn có thể xem xét sử dụng docker-compose run --service-ports <service-name>. Nếu không có tùy chọn đó, docker-compose sẽ chỉ ánh xạ các cổng khi sử dụng docker-compose up.

Giống như với docker run bạn cũng có thể sử dụng tùy chọn --rm để xóa các vùng chứa khi bạn đã hoàn tất.

Nếu hình ảnh của bạn sử dụng ENTRYPOINT, bạn nên cân nhắc việc này trong docker-compose.yml với entrypoint: /bin/bash.

+0

Cảm ơn Jan, nhưng không hoàn toàn những gì tôi cần, tuy nhiên tôi đã tìm thấy một giải pháp. Tôi sẽ cố gắng đăng nó trong một vài ngày. – f1nn

+0

Cảm ơn, điều này làm việc tốt cho tôi. –

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