Невозможно передать переменные окружения с опцией docker-compose run -e - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь получить переменную из командной строки, используя:

 sudo docker-compose -f docker-compose-fooname.yml run -e BLABLA=hello someservicename

Мой файл выглядит так:

version: '3'

services:
  someservicename:
    environment:
      - BLABLA
    image: docker.websitename.com/image-name:latest
    volumes:
      - /var/www/image-name
    command: ["npm", "run", BLABLA]

Все это для того, чтобы я мог запустить скрипт, определяемый тем, что я использую в качестве BLABLA в командной строке, я попытался использовать официальную документацию .

Пробовал несколько вариантов, включая:

sudo COMPOSE_OPTIONS="-e BLABLA=hello" docker-compose -f docker-compose-fooname.yml run someservicename

UPDATE: Я должен отметить, что как всегда, я всегда получаю:

WARNING: The FAKE_SERVER_MODE variable is not set. Defaulting to a blank string.

Даже когда я просто запускаю следующую команду (будь то удаление, остановка ..):

  sudo docker-compose -f docker-compose-fooname.yml stop someservicename

Для справки: я сначала извлекаю изображение, я никогда не собираю его, но мой инструмент CI / CD (gitlab), это влияет на него?

Я использую docker-compose версии 1.18, docker версии 18.06.1-ce, Ubuntu 16.04

1 Ответ

0 голосов
/ 30 октября 2018

Этот синтаксис docker-compose.yml работает не так, как вы ожидаете. Если вы напишите:

command: ["npm", "run", BLABLA]

Синтаксический анализатор YAML превратит это в список из трех строк npm, run и BLABLA, и когда Docker Compose увидит этот список, он попытается выполнить эту команду буквально, без запуска оболочки для попробуй что-нибудь истолковать.

Если вы установите его в строку, Docker запустит над ним оболочку, и эта оболочка расширит переменную среды; попробовать

command: "npm run $BLABLA"

Как уже было сказано, это немного странное использование Docker Compose. Поскольку ключ services: подразумевает, что более обычным вариантом использования является запуск некоторого набора долгосрочных служб с docker-compose up; вы могли бы npm run start или что-то вроде службы, но у вас обычно не было бы полностью параметризуемого блока без значения по умолчанию.

Я мог бы сделать docker-compose.yml просто сказать

version: '3'
services:
  someservicename:
    image: docker.websitename.com/image-name:latest
    command: ["npm", "run", "start"]

и если мне действительно нужно запустить что-то еще, запустите

docker-compose run --rm someservicename npm run somethingelse

(или просто используйте мой локальный ./node_modules/.bin/somethingelse и вообще не задействуйте Docker)

...