2015-10-11 17 views
48

Có lý do nào để sử dụng chạy để khởi động tệp docker-compose.yml hoặc bạn chỉ nên sử dụng up?Tôi có nên sử dụng tính năng khởi động hoặc khởi động docker-compose không?

Tôi hiểu rằng run có thể khởi động một vùng chứa cụ thể, nhưng tôi đề cập đến trường hợp bạn sử dụng nó với việc chỉ định vùng chứa để nó khởi động tất cả các vùng chứa yml của bạn.

Trả lời

55

Như đã đề cập trong docker-compose run:

Lệnh đi ngang qua chạy đè lệnh được xác định trong cấu hình dịch vụ.
Ví dụ: nếu cấu hình dịch vụ web được bắt đầu bằng bash thì docker-compose run web python app.py sẽ ghi đè cấu hình đó bằng python app.py.

Điểm khác biệt thứ hai là lệnh docker-compose runkhông tạo bất kỳ cổng nào được chỉ định trong cấu hình dịch vụ.
Điều này ngăn cản các va chạm cổng với các cổng đã mở. Nếu bạn làm muốn cổng của dịch vụ tạo ra và ánh xạ tới máy chủ, xác định --service-cổng cờ:

$ docker-compose run --service-ports web python manage.py shell 

Vì vậy, trừ khi bạn có những nhu cầu cụ thể (trọng một lệnh hoặc chạy chỉ có một container trên khác nhau cổng), docker-compose up (ngay cả đối với một container) là đủ.

Bạn có thể giúp giải thích lý do tại sao hoặc khi nào bạn không muốn tạo cổng? Đó là lý do tại sao hoặc khi nào họ có thể xung đột với các cổng đã mở

Chỉ cần thực hiện các lệnh một lần cho các dịch vụ của bạn.
Điều đó có nghĩa là, nếu bạn đã thực hiện docker-compose up, tất cả các vùng chứa của bạn đã chạy trên các cổng được chỉ định từ docker-compose.yml.
Thực hiện một số docker-compose run ở giai đoạn này (để thực hiện lệnh một lần), nếu nó đang tôn trọng cùng một cổng, sẽ không thành công ngay lập tức. Do đó mặc định không tạo ra các cổng đó.


Một trường hợp sử dụng (trong Compose environment variables reference):

Để xem những gì biến môi trường là có sẵn cho một dịch vụ, chạy docker-compose run SERVICE env.

9

tôi muốn chỉ ra rằng nếu bạn đang sử dụng Python với trình gỡ lỗi pdb:

import pdb; pdb.set_trace() 

Nó sẽ không thả vào vỏ nếu bạn thực hiện kịch bản của bạn sử dụng:

docker-compose up 

Tuy nhiên, nếu bạn sử dụng chạy, nó sẽ thả xuống trình gỡ lỗi như mong đợi:

docker-compose run 
Các vấn đề liên quan