Docker映像:创建内部可用的环境变量

Docker映像:创建内部可用的环境变量,docker,dockerfile,Docker,Dockerfile,在我的图像上,我想设置一些环境变量,例如:my_VAR,其中它将有一个静态值,例如:my_VAR=12,但我不想通过docker的-e参数或docker compose.yml的环境部分来设置它 此外,当我进行docker构建或docker compose构建时,我不想成为构建参数 version: '3.2' services: db: restart: always image: postgres:alpine volumes: - backup-da

在我的图像上,我想设置一些环境变量,例如:my_VAR,其中它将有一个静态值,例如:my_VAR=12,但我不想通过docker的-e参数或docker compose.yml的环境部分来设置它

此外,当我进行docker构建或docker compose构建时,我不想成为构建参数

version: '3.2'
services:
  db:
    restart: always
    image: postgres:alpine
    volumes:
      - backup-data:/var/lib/postgresql/data
    env_file:
      - ./env/.dev

我怎样才能做到这一点?

您可以从入口点脚本中做到这一点

在Dockerfile中:

ENTRYPOINT ["/entrypoint.sh"]
entrypoint.sh示例:

#!/bin/sh
export VAR=foobar
exec /usr/bin/python "$@"
要更灵活并允许使用-e选项进行设置,请执行以下操作:


对于您的问题,最好的解决方案是在docker compose构建中包含一个env_文件

version: '3.2'
services:
  db:
    restart: always
    image: postgres:alpine
    volumes:
      - backup-data:/var/lib/postgresql/data
    env_file:
      - ./env/.dev
然后在您的env_文件中:

POSTGRES_USER=my_user
POSTGRES_PASSWORD=my_password
POSTGRES_DB=my_db

那么您希望它从何而来?我只想在内部设置,并且只有在docker容器中运行的软件和脚本才能修改它。您是否查看了Dockerfile中可用的ENV指令?你可以在那里定义静态环境变量,就我所知,你不能这样做;你为什么要这么做?您认为这会解决什么实际问题?但是通过ENV指令,您可以在将图像运行到container时通过-e param更改其值,我不希望出现这种行为。