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

告诉docker-compose哪些容器应该由docker-compose up启动 从docker-compose up客户端获取所有链接容器的输出


当前回答

更新

从docker-compose 1.28.0开始,新的服务配置文件就是为此而设计的!通过配置文件,您可以将服务标记为仅在特定的配置文件中启动:

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开始,可以传递多个docker-compose。带有-f标志的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。

其他回答

你通常不想这么做。使用Docker Compose,你可以定义服务来组成你的应用。npm和manage.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 up -d client

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

$ docker-compose logs

它由所有开始的容器组成

您可以使用run命令并指定要运行的服务。注意,run命令不会向主机公开端口。如果需要,您应该使用标记——service-ports来完成此操作。

Docker-compose run——service-ports客户端服务器数据库

如果你有多个compose文件,你应该先把它们添加到你想要的compose文件中的每个服务中。请看下图:

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

哦,就是这个:

$ docker-compose up client server database