如何在 docker compose 中配置密码?

How do I configure a secret in docker compose?

我有一个简单的 docker 组合,它使用了一个秘密。但是我一直无法访问这个秘密。日志显示在服务器中传递的 /run/secrets/username 但不是实际的用户名。我的设置有什么问题?如何在我的服务中从 DB_USERNAME 获取秘密值?

version: "3.9"

services:
  ...
  bank-microservice:
    image: ${IMAGE_BANK}
    restart: on-failure
    networks:
      - backend
    expose:
      - 80
    secrets:
      - username
    environment:
      - DB_USERNAME=/run/secrets/username
    env_file:
      - ./env/microservice.env
    depends_on:
      - db
secrets:
  username:
    file: ./secrets/username
...

设置秘密只会在 /run/secrets 下的文件系统位置公开该值。如果您想将该值放入变量中,则需要在容器启动过程中自己执行此操作。

例如,这样的 ENTRYPOINT 脚本将使 /run/secrets/username 可用作 DB_USERNAME:

#!/bin/sh

if [ -f /run/secrets/username ]; then
  export DB_USERNAME=$(cat /run/secrets/username)
fi

exec "$@"