docker-compose不会初始化容器环境变量

时间:2019-05-14 08:51:14

标签: docker docker-compose environment-variables

我正在尝试执行简单的代码。

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

也给出了相同的结果。

docker info输出:

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

有人有解决问题的想法吗?

P.S。对不起,我的英语。

2 个答案:

答案 0 :(得分:1)

environment选项指定将哪些变量传递给容器。它们在docker-compose文件中不可用。 如果您的docker-compose文件需要env vars,请在同一目录中创建一个.env文件:

#.env
VAR1=variable1
VAR2=222

现在它应该适用于docker-compose up

注释

从docker-compose中删除environment选项-除非您需要容器内的var,否则没有任何意义。

答案 1 :(得分:1)

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. variable-substitution
  2. docker inspect命令检查该容器的env变量是否配置正确。
  3. 我使用了版本3,因为我的docker-compose不支持您使用的版本。
  4. .env文件功能仅在使用docker-compose up命令时有效,而不适用于docker stack deploy。
  5. 当您的配置需要文字美元符号时,可以使用$$(双美元符号)。这也可以防止Compose插值,因此$$可以让您引用您不想由Compose处理的环境变量。
  6. 如果您忘记并使用单个美元符号($),则Compose会将值解释为环境变量并警告您:
  

警告:未设置VAR1变量。默认为空字符串。   警告:未设置VAR2变量。默认为空字符串。

相关问题