docker-仅限于某些容器

aqu*_*tae 106 docker docker-compose

我有一个docker-compose.yml包含几个容器.其中三个用于我的应用程序(客户端,服务器和数据库),其余用于各种开发工具(例如psql,npm,manage.py等).当我做docker-compose up所有这些都开始了,但我只想要三个主要的开始.由于我已经指定了链接,我可以docker-compose up client从这三个开始,但是输出只来自那个容器.那么,有没有办法做到以下其中一种:

  1. 告诉docker-compose应该启动哪些容器 docker-compose up
  2. 从中获取所有链接容器的输出 docker-compose up client

wsl*_*wsl 184

您可以使用以下命令启动容器:

$ docker-compose up -d client
Run Code Online (Sandbox Code Playgroud)

这将在后台运行容器,输出将是可用的

$ docker-compose logs
Run Code Online (Sandbox Code Playgroud)

它将包含所有已启动的容器

  • 完善.如果要查看日志回显到stdout,只需删除-d标志即可 (6认同)
  • 当心 docker-compose.yml 上的 `depends_on` 标志 (4认同)

acr*_*ran 32

更新

docker-compose1.28.0开始,新的服务配置文件就是为此而制作的!随着profiles您可以标记服务只在启动特定的配置文件:

services:
  client:
    # ...
  db:
    # ...
  npm:
    profiles: ["cli-only"]
    # ...
Run Code Online (Sandbox Code Playgroud)
docker-compose up # start main services, no npm
docker-compose run --rm npm # run npm service
docker-compose --profile cli-only up # start main and all "cli-only" services
Run Code Online (Sandbox Code Playgroud)

原答案

docker-composev1.5 开始,可以使用标志传递多个docker-compose.yml文件-f。这允许您将开发工具拆分为一个单独的工具docker-compose.yml,然后仅按需包含:

# 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
Run Code Online (Sandbox Code Playgroud)

有关这方面的深入讨论,请参阅docker/compose#1896

  • 很有用!在 `docker-compose --profile cli-only` 之后缺少一个“up” (2认同)
  • 如果您至少有一项没有配置文件的服务,如果您运行“--profile profile”,则该没有配置文件的服务也将运行。因此,您应该将“profile”指令添加到您的所有服务中。1.29.1 (2认同)

Hug*_*o R 30

启动docker-compose文件中定义的特定服务.例如,如果你有一个docker-compose.yml

sudo docker-compose start db  
Run Code Online (Sandbox Code Playgroud)

给出如下的撰写文件:

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:
Run Code Online (Sandbox Code Playgroud)

有些时候你想在启动整个套件之前只启动mySQL(有时你只想填充一个数据库).

  • @LukAron - `start` 假设容器已经存在并启动它,`up` 将在必要时拉取图像,在必要时创建容器,然后启动容器。 (8认同)
  • 为什么在docker-compose ...之前加上sudo?没必要吧? (4认同)
  • 如果您的用户没有在 docker 组中,是的,这是必要的。 (2认同)
  • 如果我使用“sudo docker-compose up db”而不是“sudo docker-compose start db”有什么区别 (2认同)

rap*_*ngy 21

哦,就这样:

$ docker-compose up client server database
Run Code Online (Sandbox Code Playgroud)


小智 8

一个好的解决方案是只运行像这样的所需服务:

docker-compose up --build $(<services.txt)
Run Code Online (Sandbox Code Playgroud)

和 services.txt 文件如下所示:

services1 services2, etc
Run Code Online (Sandbox Code Playgroud)

当然如果有依赖(depends_on),需要一起运行相关的服务。

--build 是可选的,仅作为示例。


小智 5

您可以使用docker compose up --build ${service-name} -d。其中标志 -d 用于在分离模式下运行。