在 Docker 中将秘密环境变量存储为单独的数据容器

Storing secret env variables as separate data container in Docker

我想在 docker-compose 中使用来自主机 OS 的 'secret'(密码等)env 变量。

我认为使用数据容器可以实现这一点。但它不起作用 - 'No file present'。请告知哪里出了问题,以及这种方式是否可行。

docker-compose.yml

version: '2'
services:
  web:
    build: .
    command: bundle exec puma
    env_file: .env
    environment:
      - RACK_ENV=production
      - RAILS_ENV=production
    volumes_from:
      - config
    ports:
      - "3000:3000"
    links:
      - db

  config:
    image: busybox
    volumes:
      - /myapp/config/.env:.env

我也尝试使用 /myapp/config:/config 作为音量,使用 /config/.env 作为 env_file,但结果相同。

Dockerfile 没有以任何方式提及或引用 'config' 或“.env”。

感谢您的回复。

编写环境文件

env_file 文件由 docker-compose 在您 运行 所在的目录中本地读取。然后在 运行 时间将变量传递给容器(如 docker run -e)。

web:
  build: .
  command: bundle exec puma
  env_file: ./.env
  environment:
    - RACK_ENV=production
    - RAILS_ENV=production
  ports:
    - "3000:3000"
  links:
    - db

换人

Compose也可以substitute environment variables进入config

如果您在 运行 docker-compose 环境定义如下

时在主机上设置 SECRET_HOST_ENV_VARIABLE
web:
  build: .
  command: bundle exec puma
  environment:
    - RACK_ENV=production
    - RAILS_ENV=production
    - SECRET_ENV_VARIABLE=${SECRET_HOST_ENV_VARIABLE}
  ports:
    - "3000:3000"
  links:
    - db

SECRET_ENV_VARIABLE 将在容器环境中可用。