Как применить docker run с параметром --config к docker compose - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть следующая команда docker:

sudo docker run --env-file env.list \
  -p 80:8080 \
  -v $PWD/snowplow/config:/snowplow/config  \
  snowplow/scala-stream-collector-kinesis:1.0.0  \
  --config /snowplow/config/config.hocon

Я пытаюсь переместить это в файл docker-compose.yml, но у меня возникают проблемы с опцией --config. Мой файл выглядит следующим образом, кто-нибудь может увидеть, где я иду не так:

version: '3.3'
services:
  collector:
    image: snowplow/scala-stream-collector-kinesis:1.0.0
    environment:
      - AWS_CBOR_DISABLE=1
    ports:
      - "80:8080"
    volumes:                                                                                                  
      - ./data/snowplow:/snowplow
    configs:
      - source: collectorcnf                                                                                    
        target: /snowplow/config/config.hocon          
configs:
  collectorcnf:
    file: ./data/snowplow/config/config.hocon

Я переместил файл конфигурации соответственно, чтобы соответствовать. Я получаю сообщение об ошибке sudo docker-compose up:

collector_1  | Error: Missing option --config
collector_1  | Try --help for more information.
collector_1  | configuration has no "collector" path

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Все, что появляется после имени изображения, переопределяет команду изображения по умолчанию. Итак, вы хотите:

version: '3.3'
services:
  collector:
    image: snowplow/scala-stream-collector-kinesis:1.0.0
    # the below "command" is the portion after the image name in the run command:
    command: ["--config", "/snowplow/config/config.hocon"]
    environment:
      - AWS_CBOR_DISABLE=1
    ports:
      - "80:8080"
    volumes:
      - ./data/snowplow:/snowplow

Когда для изображения определена точка входа, команда добавляется после точки входа, чтобы стать аргументами команды. Важно использовать форматирование json, чтобы избежать его использования в синтаксисе /bin/sh -c "...".

1 голос
/ 10 апреля 2020

Очевидно, что --config с командой docker и configs в docker-compose указывают на две разные вещи.

Параметр configs в файле композиции предназначен для docker config, что используется для настройки службы конфигурации. Подробнее здесь . Это прекрасно работает с docker swarm и при запуске docker сервисов.

С другой стороны, опция --config специально предназначена для конфигурации клиента docker, т.е. файла в каталоге .docker. Подробнее здесь .

Примечание: Я понимаю, почему это наименование очень запутанно. При запуске docker-compose up с configs выдается предупреждение, которое указывает на configs - выдержка ниже (на основе вашего тега collector):

WARNING: Some services (collector) use the 'configs' key, which will be ignored. Compose does not support 'configs' configuration - use `docker stack deploy` to deploy to a swarm.
...