docker-组合 vs docker-组合 service1 service2

docker-compose up vs docker-compose up service1 service2

我有下面的 docker-compose 文件。如果我 运行 docker-compose up 一切正常。但是,如果我这样做 docker-compose up minio1 minio2 minio3 minio4,则不会创建卷,并且我看不到以下日志。它不会创建我假设的卷。我在真正的 docker-compose.yml 文件中还有许多其他服务,我不想 运行 docker-compose up 并一直启动每个服务。我如何只启动这 4 个服务并创建 volumes/networks?

这不会出现docker-compose up minio1 minio2 ...

Creating volume "robot_models1" with default driver
Creating volume "robot_models2" with default driver  
Creating volume "robot_models3" with default driver  
Creating volume "robot_models4" with default driver

docker-compose.yml

version: '3'
services:
  minio1:
    image: minio/minio:RELEASE.2018-07-10T01-42-11Z
    volumes:
      - models1:/export
    ports:
      - "9001:9000"
    environment:
      MINIO_ACCESS_KEY: access123123
      MINIO_SECRET_KEY: secret123123
    command: server http://minio1/export http://minio2/export http://minio3/export http://minio4/export

  minio2:
    image: minio/minio:RELEASE.2018-07-10T01-42-11Z
    volumes:
      - models2:/export
    ports:
      - "9002:9000"
    depends_on:
      - minio1
    environment:
      MINIO_ACCESS_KEY: access123123
      MINIO_SECRET_KEY: secret123123
    command: server http://minio1/export http://minio2/export http://minio3/export http://minio4/export

  minio3:
    image: minio/minio:RELEASE.2018-07-10T01-42-11Z
    volumes:
      - models3:/export
    ports:
      - "9003:9000"
    depends_on:
      - minio2
    environment:
      MINIO_ACCESS_KEY: access123123
      MINIO_SECRET_KEY: secret123123
    command: server http://minio1/export http://minio2/export http://minio3/export http://minio4/export

  minio4:
    image: minio/minio:RELEASE.2018-07-10T01-42-11Z
    volumes:
      - models4:/export
    ports:
      - "9004:9000"
    depends_on:
      - minio3
    environment:
      MINIO_ACCESS_KEY: access123123
      MINIO_SECRET_KEY: secret123123
    command: server http://minio1/export http://minio2/export http://minio3/export http://minio4/export

  ## By default this config uses default local driver,
  ## For custom volumes replace with volume driver configuration.
volumes:
  models1:
  models2:
  models3:
  models4:

docker-撰写版本:

docker-compose version 1.21.2, build a133471
docker-py version: 3.4.1
CPython version: 3.6.5
OpenSSL version: OpenSSL 1.0.2o  27 Mar 2018

解决方案

您必须执行这 4 个命令:

docker-compose up minio1 
docker-compose up minio2 
docker-compose up minio3 
docker-compose up minio4

说明

您不能执行 docker-compose up minio1 minio2 minio3 minio4 的原因是您正在执行:docker-compose up [serviceName] [entrypoint] [parameter1] [parameter2]... 即,docker-compose 允许您仅执行 compose 文件中定义的服务,如果需要,可以使用其参数指定新的入口点,但不能仅在一个命令中指定多个服务。

尝试:

docker-compose up -d minio1 minio2 minio3 minio4

这对我有用

实际上,我在当前的项目中遇到了类似的挑战。这让我想到了编写一个我称之为 docker-compose-profile(或简称:dcp)的小脚本的想法。我昨天在 GitLab 上以 docker-compose-profile 的形式发布了这篇文章。简而言之:我现在可以使用像 dcp -p all-minio "up -d" 这样的命令启动几个预定义的 docker-compose 配置文件。配置文件可能包含您 docker.compose.yml 中所有已定义服务的子集。使用这种机制,可以很容易地启动在 dcp.yml 中单独定义的几组服务。定义启动的一些步骤,也可以首先启动所有 minio 服务,下一步将启动其他服务。 欢迎试用并提供一些反馈或建议以进一步改进。

所以可以涵盖两种情况:a) 仅启动您的 minio 东西 b) 首先启动 minio 服务并继续其他服务。

你真的检查过是否创建了卷吗? 运行 docker-compose up minio1 minio2 minio3 minio4 将启动这些容器及其所有依赖项,例如 depends_on 容器和卷,但只会输出命令中明确列出的容器的日志。

即卷实际上是创建的,但这只是没有记录给你,因为你只附加到容器的日志! (卷是由 docker-compose 而不是容器本身创建的)。

I have many other services in the real docker-compose.yml file, I don't want to run docker-compose up and start every service all the time.

docker-compose 1.28.0 the new service profiles 开头就是为此而生!使用 profiles 您可以将服务标记为仅在特定配置文件中启动:

services:
  minio1:
    profiles: ["minio"]
    #...

  minio2:
    profiles: ["minio"]
    #...

  minio3:
    profiles: ["minio"]
    #...

  minio4:
    profiles: ["minio"]
    #...

  service1:
    profiles: ["other"]
    #...

  service2:
    profiles: ["other"]
    #...

  service3:
    profiles: ["other"]
    #...

  service4:
    profiles: ["other"]
    #...
docker-compose up # start only your default services (without `profiles`)
docker-compose --profile minio up # start default and minio services
docker-compose --profile other up # start default and "other" services

您也可以考虑将您的服务拆分为 multiple docker-compose.yml files:

# only start services in docker-compose.minio.yml
docker-compose -f docker-compose.minio.yml up

# merge docker-compose.minio.yml with docker-compose.yml
# and start all contained services
docker-compose -f docker-compose.yml -f docker-compose.minio.yml up