docker-只为某些容器组合
docker-compose up for only certain containers
我有一个 docker-compose.yml
,其中包含多个容器。其中三个用于我的应用程序(客户端、服务器和数据库),其余用于各种开发工具(例如 psql、npm、manage.py 等)。当我执行 docker-compose up
时,所有这些都已启动,但我只想启动三个主要的。由于我指定的链接,我可以只用 docker-compose up client
启动这三个,但输出仅来自那个容器。那么,有没有办法执行以下操作之一:
- 告诉 docker-compose 哪些容器应该由
docker-compose up
启动
- 从
docker-compose up client
的所有链接容器中获取输出
您可以使用以下方式启动容器:
$ docker-compose up -d client
这将 运行 容器在后台,输出将可从
$ docker-compose logs
它将包含您启动的所有容器
您通常不想这样做。使用 Docker Compose,您可以定义 services,compose 您的应用程序。 npm
和 manage.py
只是管理命令。您不需要容器。如果你需要,比如说用 manage.py
创建你的数据库表,你所要做的就是:
docker-compose run client python manage.py create_db
将其视为 Heroku 使用的一次性测功机。
如果您确实需要将这些管理命令视为单独的容器(并为此使用 Docker Compose),您可以创建一个单独的 .yml
文件并启动 Docker Compose使用以下命令:
docker-compose up -f my_custom_docker_compose.yml
启动您的 docker-compose 文件中定义的特定服务。
例如,如果您有 docker-compose.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),需要运行相关服务一起。
--构建是可选的,仅作为示例。
哦,就是这样:
$ docker-compose up client server database
更新
以 docker-compose
1.28.0 the new service profiles 开头就是为此而生!使用 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
原回答
Since docker-compose
v1.5 it is possible to pass multiple docker-compose.yml
files with the -f
flag。这允许您将您的开发工具拆分成一个单独的 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
有关这方面的深入讨论,请参阅 docker/compose#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
我有一个 docker-compose.yml
,其中包含多个容器。其中三个用于我的应用程序(客户端、服务器和数据库),其余用于各种开发工具(例如 psql、npm、manage.py 等)。当我执行 docker-compose up
时,所有这些都已启动,但我只想启动三个主要的。由于我指定的链接,我可以只用 docker-compose up client
启动这三个,但输出仅来自那个容器。那么,有没有办法执行以下操作之一:
- 告诉 docker-compose 哪些容器应该由
docker-compose up
启动
- 从
docker-compose up client
的所有链接容器中获取输出
您可以使用以下方式启动容器:
$ docker-compose up -d client
这将 运行 容器在后台,输出将可从
$ docker-compose logs
它将包含您启动的所有容器
您通常不想这样做。使用 Docker Compose,您可以定义 services,compose 您的应用程序。 npm
和 manage.py
只是管理命令。您不需要容器。如果你需要,比如说用 manage.py
创建你的数据库表,你所要做的就是:
docker-compose run client python manage.py create_db
将其视为 Heroku 使用的一次性测功机。
如果您确实需要将这些管理命令视为单独的容器(并为此使用 Docker Compose),您可以创建一个单独的 .yml
文件并启动 Docker Compose使用以下命令:
docker-compose up -f my_custom_docker_compose.yml
启动您的 docker-compose 文件中定义的特定服务。 例如,如果您有 docker-compose.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),需要运行相关服务一起。
--构建是可选的,仅作为示例。
哦,就是这样:
$ docker-compose up client server database
更新
以 docker-compose
1.28.0 the new service profiles 开头就是为此而生!使用 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
原回答
Since docker-compose
v1.5 it is possible to pass multiple docker-compose.yml
files with the -f
flag。这允许您将您的开发工具拆分成一个单独的 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
有关这方面的深入讨论,请参阅 docker/compose#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