从秘密中设置 docker 容器内的环境

问题描述 投票:0回答:1

在 docker swarm 中,我需要将环境变量设置为 docker 密钥的值。 我遵循了答案here,但它对我不起作用。

为了尝试各种选项,我创建了一个名为 testpwd 的秘密,并为 docker 堆栈制作了一个非常简单的 compose 文件,如下所示:

services:
  server:
    image: bash
    deploy:
      replicas: 1
    entrypoint: ["sh", "-c", "cat /run/secrets/testpwd; TESTSEC=`cat /run/secrets/testpwd`; export TESTSEC; echo TESTSEC; echo $TESTSEC; ping stackoverflow.com"]
    secrets:
      - testpwd

secrets:
  testpwd:
    external: true

来自该堆栈启动的容器的日志显示:

密码1234

测试安全

PING stackoverflow.com (104.18.32.7):56 个数据字节 64 个字节来自 104.18.32.7:seq=0 ttl=56 时间=2.548 毫秒

/run/secrets/testpwd 中的内容是 pwd1234TESTSPEC 既没有创建为该 shell 的环境变量,也没有导出。

我尝试了多种入口点变体,例如:

entrypoint: ["sh", "-c", "export TESTSEC=$$(cat /run/secrets/testpwd); ping stackoverflow.com"]
entrypoint: ["sh", "-c", "export TESTSEC=$$(cat /run/secrets/testpwd) && ping stackoverflow.com"]

以及开头链接中提到的其他内容。

但是没有任何作用。当我使用“docker exec -it cont_id sh”进入容器时,我可以看到 ping 正在运行,并在 /run/secrets/testpwd 中看到密钥的值,但没有 TESTSEC 环境变量。

以防万一,在主机中:

$docker --version
Docker version 26.1.0, build 9714adc

$docker compose version
Docker Compose version v2.26.1

$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy
docker docker-compose docker-swarm docker-secrets
1个回答
0
投票

stack.yaml

services:
  server:
    image: bash
    deploy:
      mode: replicated-job
      replicas: 1
    entrypoint: 
    - sh
    - -c
    - | 
      export TESTSEC=$$(cat /run/secrets/testpwd)
      echo $$TESTSEC
    secrets:
      - testpwd

secrets:
  testpwd:
    file: secret.txt
> docker stack deploy -c stack.yaml test
Creating network test_default
Creating secret test_testpwd
Creating service test_server
> docker service logs test_server
test_server.0.s68pzslhjbpw@docker-desktop    | Secret1234

效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.