docker-compose up仅适用于某些容器


161

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

1
根据文档:docker-compose up [options] [SERVICE...]您可以启动要列出的任何服务子集。
Jesse Chisholm

Answers:


257

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

$ docker-compose up -d client

这将在后台运行容器,并且可以从以下位置获得输出

$ docker-compose logs

它将包含所有启动的容器


11
完善。如果您想查看回显到stdout的日志,只需删除-d标志
Natus Drew

如果依赖容器已经在运行并且我不想重新启动它,是否可以启动从属容器?
majTheHero

43

要启动在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(有时只想填充数据库),然后再启动整个套件。


9
为什么sudo以前docker-compose ...呢?没必要吧?
Jochem Schulenklopper

1
如果您的用户不在docker组中,则是有必要的。
delpo

如果我sudo docker-compose up db 代替使用,会有什么区别 sudo docker-compose start db
Luk Aron

3
@LukAron- start假定该容器已经存在并只是启动它,up将在必要时提取图像,在必要时创建容器,然后启动该容器。
Jesse Chisholm

10

哦,就这样:

$ docker-compose up client server database

4

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

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

和services.txt文件如下所示:

services1 services2, etc

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

--build是可选的,例如。


0

docker-composev1.5开始,可以通过标记传递多个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

我创建了一个拉取请求,以添加功能以更方便地实现此目的(docker / compose#7548),但是由于这需要更改compose文件规范,因此现在将在compose-spec / compose-spec#中进行讨论87


-1

您通常不想这样做。随着多克撰写您定义的服务构成您的应用程序。npmmanage.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

15
很多人都想这样做。
kojiro

8
@ msrd0您通常不想这样做吗?让人们自己决定!
克里斯(Kris)'18

1
应该有一条关于SO的规则,您必须在不解释原因的情况下才能投票反对。因为这(或至少是第一部分)最有意义,所以为每个可能的管理命令使用一个额外的容器是很奇怪的。
鸣叫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.