docker stack:从秘密设置环境变量

raj*_*raj 12 docker-compose docker-secrets

我试图从秘密设置密码,但它没有拿起它.Docker Server版本为17.06.2-ce.我用下面的命令来设置秘密:

echo "abcd" | docker secret create password -
Run Code Online (Sandbox Code Playgroud)

我的docker compose yml文件看起来像这样

version: '3.1'
...
 build:
  context: ./test
  dockerfile: Dockerfile
environment:
  user_name: admin
  eureka_password: /run/secrets/password
secrets:
  - password
Run Code Online (Sandbox Code Playgroud)

我也有root的秘密标签:

secrets:
  password:
     external: true
Run Code Online (Sandbox Code Playgroud)

当我在环境中对密码进行硬编码时,它可以正常工作,但是当我尝试通过秘密时它不会接收.我试着把作曲版本改为3.2,但没有运气.任何指针都非常感谢!

小智 19

要详细说明原始接受的答案,只需更改 docker-compose.yml 文件,使其包含此作为入口点:

version: "3.7"
  services:
    server:
      image: alpine:latest
      secrets:
        - test
      entrypoint: [ '/bin/sh', '-c', 'export TEST=$$(cat /var/run/secrets/test) ; source /entrypoint.sh' ]
    
secrets:
  test:
    external: true
Run Code Online (Sandbox Code Playgroud)

这样您就不需要任何额外的文件!


Ale*_*ina 6

您需要修改 docker compose 以从/run/secrets. 如果您想通过 设置环境变量bash,您可以覆盖您的docker-compose.yaml文件,如下所示。

您可以将以下代码另存为entrypoint_overwrited.sh

# get your envs files and export envars
export $(egrep  -v '^#'  /run/secrets/* | xargs) 
# if you need some specific file, where password is the secret name 
# export $(egrep  -v '^#'  /run/secrets/password| xargs) 
# call the dockerfile's entrypoint
source /docker-entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

在您docker-compose.yaml覆盖dockerfileentrypoint键:

version: '3.1'
#...
build:
  context: ./test
  dockerfile: Dockerfile
entrypoint: source /data/entrypoint_overwrited.sh
tmpfs:
  - /run/secrets
volumes:
  - /path/your/data/where/is/the/script/:/data/
environment:  
  user_name: admin
  eureka_password: /run/secrets/password
secrets:
  - password
Run Code Online (Sandbox Code Playgroud)

使用上面的代码片段,环境变量user_nameoreureka_password将被覆盖。如果您的秘密 env 文件定义了相同的 env vars,那么如果您在服务中定义 some ,也会发生同样的情况env_file