docker 码头-仅为某些集装箱组装

shyt4zoc  于 2023-02-07  发布在  Docker
关注(0)|答案(9)|浏览(168)

我有一个docker-compose.yml,它包含了几个容器。其中三个用于我的应用程序(客户端、服务器和数据库),其余的用于各种开发工具(例如psql、npm、manage.py等)。当我使用docker-compose up时,所有的容器都启动了,但我只希望启动三个主要的容器。由于我指定了链接,我可以用docker-compose up client启动这三个容器,但是输出只来自一个容器,那么,有没有办法做到以下几点之一:
1.告诉docker-compose哪些容器应该由docker-compose up启动
1.从docker-compose up client获取所有链接容器的输出

ui7jx7zq

ui7jx7zq1#

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

$ docker-compose up -d client

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

$ docker-compose logs

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

eufgjt7s

eufgjt7s2#

启动在您的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(有时您只想填充数据库)。

ars1skjm

ars1skjm3#

更新

docker-compose 1.28.0开始,新的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

原始答案

docker-compose v1.5开始,可以通过-f标志传递多个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

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

xqkwcwgp

xqkwcwgp4#

噢,就这个:

$ docker-compose up client server database
rqcrx0a6

rqcrx0a65#

一个好的解决方案是只运行所需的服务,如下所示:

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

和services.txt文件如下所示:

services1 services2, etc

当然如果是依赖关系(dependency_on),需要一起运行相关的服务。
--build是可选的,只是举例。

nkkqxpd9

nkkqxpd96#

实际上,在我目前的项目中,我也遇到了类似的挑战,这让我产生了写一个小脚本的想法,我称之为docker-compose-profile(简称:dcp)。我今天在GitLab上发布了这个代码docker-compose-profile。简而言之:我现在可以使用dcp -p some-services "up -d"这样的命令启动几个预定义的docker-compose配置文件,欢迎尝试,并给予一些反馈或建议以进一步改进。

twh00eeo

twh00eeo7#

您可以使用run命令并指定要运行的服务。请注意,run命令不会向主机公开端口。如果需要,您应该使用标志--service-ports来执行此操作。
docker-compose run --service-ports client server database

sdnqo3pr

sdnqo3pr8#

如果你有多个compose文件,你应该首先添加他们在记住每个服务后,从组成文件,你想了。看下面:

docker-compose -f $(COMPOSE_FILES) -f $(ARM_64_COMPOSE_FILES) up -d app mysql_db_arm64
knpiaxh1

knpiaxh19#

你通常不想这么做。使用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

相关问题