Docker-compose只针对特定的容器

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

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

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

$ docker-compose up -d client

这将在后台运行容器,输出将从

$ docker-compose logs

它由所有开始的容器组成

你通常不想这么做。使用Docker Compose,你可以定义服务组成你的应用程序。npmmanage.py只是管理命令。你不需要一个容器来装它们。如果你需要,比如用manage.py创建你的数据库表,你所要做的就是:

docker-compose run client python manage.py create_db

把它想象成Heroku使用的一次性dynos。

如果你真的需要把这些管理命令当作单独的容器(也可以使用Docker Compose),你可以创建一个单独的.yml文件,并用下面的命令启动Docker Compose:

docker-compose up -f my_custom_docker_compose.yml

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

.yml
docker-compose start db

给定一个像这样的合成文件:

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:

有时,在启动整个套件之前,您只想启动mySQL(有时只是想填充数据库)。

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

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

而services.txt文件是这样的:

services1 services2, etc

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

——build是可选的,只是举个例子。

哦,就是这个:

$ docker-compose up client server database
< h2 id = " update-gzds " > < / h2 >更新

docker-compose 1.28.0开始,新的服务配置文件就是为此而生的!使用profiles,你可以将服务标记为只在特定的配置文件中启动:

services:
client:
# ...
db:
# ...
npm:
profiles: ["cli-only"]
# ...
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

原始答案

.

传递多个带有__ABC2标志的docker-compose.yml文件是可能的。这允许你将你的开发工具分割成一个单独的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

有关这方面的深入讨论,请参阅码头工人/组合# 1896

事实上,在我目前的项目中,我也遇到了非常类似的挑战。这让我想到了写一个小脚本,我称之为docker-compose-profile(或简称:dcp)。我今天在GitLab上发布了docker-compose-profile。 所以简而言之:我现在可以使用dcp -p some-services "up -d"这样的命令启动几个预定义的docker-compose配置文件。

.请尽情尝试,并为进一步改进提供一些反馈或建议

您可以使用运行命令并指定要运行的服务。注意,run命令不会向主机公开端口。如果需要,你应该使用标志--service-ports来做这件事。

docker-compose run --service-ports client server database