docker-compose не инициализирует переменные среды контейнера - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь выполнить простой код.

docker-compose.yml

version: '3.7'

services:
  test-environment:
    image: alpine:3.9
    environment: 
      VAR1: 'variable 1'
      VAR2: '222'
    command: echo variable1 = $VAR1; variable2 = $VAR2

Ожидаемое поведение: увидеть в выводе

variable1 = variable 1; variable2 = 222

Но после

docker-compose up

я получил следующее:

WARNING: The VAR1 variable is not set. Defaulting to a blank string.
WARNING: The VAR2 variable is not set. Defaulting to a blank string.
Recreating project_test-environment_1 ... done
Attaching to project_test-environment_1
test-environment_1  | variable1 = ; variable2 =
project_test-environment_1 exited with code 0

Кажется, переменные окружения не были инициализированы.Использование альтернативного синтаксиса

environment:
 - VAR1='variable 1'
 - VAR2=222

при том же результате.

вывод информации о докере:

Containers: 3
Running: 0
Paused: 0
Stopped: 3
Images: 5
Server Version: 18.09.2
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries 
 splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9754871865f7fe2f4e74d43e2fc7ccd237edcbce
runc version: 09c8266bf2fcf9519a651b04ae54c967b9ab86ec
init version: fec3683
Security Options:
 seccomp
 Profile: default
Kernel Version: 4.9.125-linuxkit
Operating System: Docker for Windows
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 973.8MiB
Name: linuxkit-00155d694b07
ID: NA32:YPM3:D5GL:JQBM:H4BN:LE2B:4HLN:5B4A:AI7T:6SDS:LSVZ:P74L
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 22
 Goroutines: 47
 System Time: 2019-05-14T08:44:02.5767035Z
 EventsListeners: 1
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine

У кого-нибудь есть идеи по решению проблемы?

PS Извините за мой английский.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

enter image description here

version: '3'
services:
  test-environment:
    image: alpine:3.9
    environment:
      VAR1: 'variable 1'
      VAR2: '222'
    command: '/bin/sh -c "echo $$VAR1 $$VAR2"'

Важные моменты:

  1. переменная-замена
  2. Команда docker inspect для проверки правильности настройки переменных env для этого контейнера.
  3. Я использовал версию 3, так как мой docker-compose не поддерживает используемую вами версию.
  4. Функция файла .env работает только при использовании команды docker-compose up и не работает с развертыванием стека докеров.
  5. Вы можете использовать $$ (двойной знак доллара), когда вашей конфигурации нужен буквальный знак доллара,Это также не позволяет Compose интерполировать значение, поэтому $$ позволяет вам ссылаться на переменные среды, которые вы не хотите обрабатывать в Compose.
  6. Если вы забыли и используете один знак доллара ($), Composeинтерпретирует значение как переменную среды и предупреждает вас:

ПРЕДУПРЕЖДЕНИЕ: переменная VAR1 не установлена.По умолчанию используется пустая строка.ВНИМАНИЕ: переменная VAR2 не установлена.По умолчанию используется пустая строка.

1 голос
/ 14 мая 2019

опция environment указывает, какие переменные будут переданы в контейнер .они не доступны снаружи в файле docker-compose.если вам нужны env vars для вашего файла docker-compose, создайте в том же каталоге файл .env:

#.env
VAR1=variable1
VAR2=222

, и теперь он должен работать для docker-compose up

note

уберите опцию environment из docker-compose - если вам не нужны переменные внутри контейнера, это не имеет смысла.

...