Như đã đề cập trong docker-compose run
(2015)
Lệnh được truyền bằng cách chạy ghi đè 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 bash
, thì docker-compose run web python app.py
ghi đè lên bằng python app.py
.
Sự khác biệt thứ hai là docker-compose run
lệnh không tạo ra bất kỳ cổng nào được chỉ định trong cấu hình dịch vụ .
Điều này ngăn chặn các va chạm cổng với các cổng đã mở. Nếu bạn muốn các cổng của dịch vụ được tạo và ánh xạ tới máy chủ, hãy chỉ định cờ --service-port:
$ 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ể đó (ghi đè một lệnh hoặc chỉ chạy một container trên các cổng khác nhau), docker-compose up
(ngay cả đối với một container) là đủ.
Bạn có thể giúp giải thích tại sao hoặc khi nào bạn không muốn các cổng được tạo không? Đó là lý do tại sao hoặc khi chúng có thể xung đột với các cổng đã mở
Đơn giản vì docker-compose run
được tạo để chạy 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 đã làm một docker-compose up
, tất cả các container của bạn đã chạy trên các cổng được chỉ định từ đó docker-compose.yml
.
Thực hiện docker-compose run
ở giai đoạn này (để thực hiện lệnh một lần), nếu nó tôn trọng cùng một cổng, sẽ thất bại 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 khác (trong phần Tham chiếu biến môi trường ):
Để xem những biến môi trường nào có sẵn cho một dịch vụ, hãy chạy docker-compose run SERVICE env
.
Phiên bản mới nhất (2019+) của các lệnh này được bật docker/docker.github.io
:
docker-compose run
để thực thi các lệnh đối với một dịch vụ đang chạy vàdocker-compose up
để sinh ra một dịch vụ mới.