docker-compose lên cho chỉ một số container


161

Tôi có một docker-compose.ymlcái chứa vài container. Ba trong số đó là dành cho ứng dụng của tôi (máy khách, máy chủ và cơ sở dữ liệu) và phần còn lại dành cho các công cụ dev khác nhau (ví dụ: psql, npm, Manage.py, v.v.). Khi tôi làm docker-compose uptất cả chúng được bắt đầu, nhưng tôi chỉ muốn ba cái chính bắt đầu. Do các liên kết tôi đã chỉ định, tôi có thể bắt đầu chỉ ba liên kết docker-compose up clientđó nhưng sau đó đầu ra chỉ từ một container đó. Vì vậy, có một cách để làm một trong những điều sau đây:

  1. Nói với docker-compose những container nào nên bắt đầu bằng docker-compose up
  2. Nhận đầu ra từ tất cả các container được liên kết từ docker-compose up client

1
Theo các tài liệu: docker-compose up [options] [SERVICE...]cho phép bạn bắt đầu bất kỳ tập hợp con các dịch vụ mà bạn quan tâm để liệt kê.
Jesse Chisholm

Câu trả lời:


257

Bạn có thể bắt đầu các container bằng cách sử dụng:

$ docker-compose up -d client

Điều này sẽ chạy các container trong nền và đầu ra sẽ có sẵn từ

$ docker-compose logs

và nó sẽ bao gồm tất cả các container bắt đầu của bạn


11
Hoàn hảo. Chỉ cần thả cờ -d nếu bạn muốn thấy các bản ghi được lặp lại ở thiết bị xuất chuẩn
Natus Drew

Có thể bắt đầu một container phụ thuộc không, nếu container phụ thuộc đang chạy và tôi không muốn khởi động lại nó?
majTheHero

43

Để bắt đầu một dịch vụ cụ thể được xác định trong tệp soạn thảo docker của bạn. ví dụ nếu bạn có docker-compose.yml

sudo docker-compose start db  

đưa ra một tập tin soạn thảo như:

version: '3.3'

services:
   db:
     image: mysql:5.7
     ports:
       - "3306:3306"
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: yourPassword
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: yourPassword

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "80:80"
     volumes:
       - ./l3html:/var/www/html
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: yourPassword
volumes:
    db_data:
    l3html:

Đôi khi bạn chỉ muốn khởi động myQuery (đôi khi bạn chỉ muốn điền vào cơ sở dữ liệu) trước khi bạn bắt đầu toàn bộ bộ phần mềm của mình.


9
Tại sao sudotrước docker-compose ...? Điều đó không cần thiết, phải không?
Joool Schulenklopper

1
nếu bạn không có người dùng của mình trong nhóm docker thì có, điều đó là cần thiết.
delpo

có gì khác biệt nếu tôi sử dụng sudo docker-compose up db thay vìsudo docker-compose start db
Luk Aron

3
@LukAron - startgiả sử container đã tồn tại và chỉ khởi động nó, upsẽ kéo hình ảnh nếu cần thiết, tạo container nếu cần thiết, sau đó khởi động container.
Jesse Chisholm

10

Ồ, chỉ với điều này:

$ docker-compose up client server database

4

Một giải pháp tốt là chỉ chạy các dịch vụ mong muốn như thế này:

docker-compose up --build $(<services.txt)

và tệp services.txt trông như thế này:

services1 services2, etc

tất nhiên nếu phụ thuộc (phụ thuộc), cần phải chạy các dịch vụ liên quan với nhau.

--build là tùy chọn, ví dụ.


0

Kể từ docker-composev1.5 , có thể truyền nhiều docker-compose.ymltệp bằng -fcờ . Điều này cho phép bạn chia các công cụ dev của bạn thành một công cụ riêng biệt docker-compose.ymlmà sau đó bạn chỉ bao gồm theo yêu cầu:

# start and attach to all your essential services
docker-compose up

# execute a defined command in docker-compose.dev.yml
docker-compose -f docker-compose.dev.yml run npm update

# if your command depends_on a service you need to include both configs
docker-compose -f docker-compose.yml -f docker-compose.dev.yml run npm update

Để thảo luận chuyên sâu về vấn đề này, hãy xem docker / compose # 1896 .

Tôi đã tạo một yêu cầu kéo để thêm chức năng để đạt được điều này với sự tiện lợi hơn nhiều ( docker / compose # 7548 ) nhưng vì điều này đòi hỏi một sự thay đổi trong thông số tập tin compose, điều này hiện đang được thảo luận tại compose-spec / compose-spec # 87 .


-1

Bạn thường không muốn làm điều này. Với Docker Soạn bạn xác định các dịch vụsoạn ứng dụng của bạn. npmmanage.pychỉ là các lệnh quản lý. Bạn không cần một container cho họ. Nếu bạn cần, hãy tạo các bảng cơ sở dữ liệu của bạn với manage.py, tất cả những gì bạn phải làm là:

docker-compose run client python manage.py create_db

Hãy nghĩ về nó như là dynos một lần Heroku sử dụng.

Nếu bạn thực sự cần coi các lệnh quản lý này như các thùng chứa riêng biệt (và cũng sử dụng Docker Compose cho các lệnh này), bạn có thể tạo một .ymltệp riêng và bắt đầu Docker Compose bằng lệnh sau:

docker-compose up -f my_custom_docker_compose.yml

15
Rất nhiều người muốn làm điều này.
kojiro

8
@ msrd0 Bạn thường không muốn làm điều này? Hãy để mọi người tự quyết định!
Kris

1
Cần có một quy tắc về SO mà bạn không thể tải xuống mà không giải thích lý do. Bởi vì điều này (hoặc ít nhất là phần đầu tiên) có ý nghĩa nhất, có một thùng chứa bổ sung cho mỗi lệnh quản lý có thể là siêu lạ.
thclark
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.