docker-仅限于某些容器

时间:2015-05-14 08:52:54

标签: docker docker-compose

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

  1. 告诉docker-撰写哪些容器应由docker-compose up
  2. 启动
  3. docker-compose up client
  4. 获取所有链接容器的输出

8 个答案:

答案 0 :(得分:130)

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

$ docker-compose up -d client

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

$ docker-compose logs

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

答案 1 :(得分:20)

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

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

答案 2 :(得分:13)

哦,就这样:

$ docker-compose up client server database

答案 3 :(得分:7)

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

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

和services.txt文件如下:

services1 services2, etc

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

-build是可选的,例如。

答案 4 :(得分:7)

Since docker-compose v1.5可以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

更新

compose-spec introduced a new profiles attribute for services将使将来的使用案例变得更加容易。将其放入docker-compose后,您将可以执行以下操作:

services:
  client:
    # ...
  db:
    # ...
  npm:
    profiles: ["cli-only"]
    # ...
docker-compose up # start main services, no npm
docker-compose run --rm npm

已经有一个open Pull Request to implement this in docker-compose

答案 5 :(得分:2)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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