docker -compose.yml не будет читать переменную окружения для имени хоста - PullRequest
1 голос
/ 16 января 2020

Я давно не публиковал на SO, надеюсь, я не нарушаю никаких правил.

У меня есть переменная окружения в моем ~/.bash_profile, экспортированном, как показано ниже, и я обязательно запустил source ~/.bash_profile:

export HOSTNAME=some-name

А вот так выглядит мой docker-compose.yml:

version: '3'

services:
    someservice:
        build:
            context: .
            dockerfile: ./Dockerfile
        image: ...
        container_name: ...
        restart: unless-stopped
        hostname: "someservice.${HOSTNAME:?Error: env var HOSTNAME is not defined or is empty}"
        ...

Если я запусту docker-compose up -d, я получу следующую ошибку:

ERROR: Invalid interpolation format for "hostname" option in service "some-service":
 "someservice.${HOSTNAME:?Error: env var HOSTNAME is not defined or is empty}"

Если я заменю HOSTNAME выше на some-name, я получу следующую ошибку:

Starting someservice ... error

ERROR: for someservice  Cannot start service: OCI runtime create failed: 
container_linux.go:346: starting container process caused "process_linux.go:449: 
container init caused \"sethostname: invalid argument\"": unknown

ERROR: Encountered errors while bringing up the project.

Любая идея, почему я получаю ошибку и как устранить ее и / или исправить ее. ? Спасибо огромное!

Edit1: исправлена ​​опечатка в моем export

Edit2: это может помочь при устранении неполадок: удаление части ERROR из файла yaml устранило проблему. Итак, по моему docker-compose.yml у меня просто есть:

...
   hostname: "someservice.${HOSTNAME} 
...

Ответы [ 3 ]

2 голосов
/ 16 января 2020

Чтобы раскрыть значение среды, мы используем =, а не :, измените свой профиль bash на export HOSTNAME=some-name

В соответствии с документацией, другие расширенные функции стиля оболочки, такие как ${VARIABLE/foo/bar}, не поддерживаются. См. https://docs.docker.com/compose/compose-file/. Возможно, вам придется использовать только "${HOSTNAME:?Error: env var HOSTNAME is not defined or is empty}" без someservice.

0 голосов
/ 17 января 2020

Работает ли это, если вы установите версию вашего композитного файла на «2.1»? Это диагностическая проверка c, подтверждающая, что документация говорит о том, что я думаю, поэтому, если вам нужно комментировать / изменять другие строки, чтобы избежать использования возможностей 3.x, это нормально на данный момент.

Создать файл документация указывает что: расширение работает для составных файлов версии 2.1, и мне интересно, не было ли это одной из вещей, которые не были перенесены в составные файлы версии 3 (есть несколько подобных вещей)

0 голосов
/ 16 января 2020

Вы docker -compose.yml должны выглядеть следующим образом:

version: '3'

services:
    someservice:
        build:
            context: .
            dockerfile: ./Dockerfile
        image: ...
        container_name: ...
        restart: unless-stopped
        environment: 
          - HOSTNAME
        ...

Это просто передаст переменную окружения вашей службе docker, вы можете обратиться к документации для получения более подробной информации о том, как передавать переменные среды в docker сервисы / контейнеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...