293

我有一个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
4

8 回答 8

429

您可以使用以下方法启动容器:

$ docker-compose up -d client

这将在后台运行容器,并且可以从

$ docker-compose logs

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

于 2015-05-14T10:08:25.390 回答
88

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

docker-compose start db  

给定一个 compose 文件,如下所示:

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

于 2018-08-25T21:17:40.500 回答
65

更新

docker-compose1.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

原始答案

docker-composev1.5开始,可以使用flag传递多个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

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

于 2020-07-23T11:04:12.937 回答
31

哦,就这样:

$ docker-compose up client server database
于 2020-05-04T14:13:02.343 回答
11

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

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

services.txt 文件如下所示:

services1 services2, etc

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

--build 是可选的,例如。

于 2020-02-22T12:13:39.950 回答
3

实际上,我在当前的项目中遇到了非常相似的挑战。这让我想到了编写一个小脚本,我称之为 docker-compose-profile(或简称:dcp)。我今天在 GitLab 上以docker-compose-profile 的形式发布了这篇文章。简而言之:我现在可以使用类似的命令启动几个预定义的 docker-compose 配置文件dcp -p some-services "up -d"。随意尝试并提供一些反馈或建议以进一步改进。

于 2020-08-16T20:32:38.187 回答
0

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

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

于 2020-12-24T14:12:57.847 回答
-2

你通常不想这样做。使用 Docker Compose,您可以定义组成您的应用程序的服务。并且只是管理命令。你不需要为它们准备一个容器。如果您需要,比如说使用 创建数据库表,您所要做的就是:npmmanage.pymanage.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
于 2015-05-17T17:03:31.987 回答