Postgresql 不接受Dockerfile环境变量
我正在使用docker和dockerfile构建图像。我想构建一个PostgreSQL映像,因此我使用此dockerfile:Postgresql 不接受Dockerfile环境变量,postgresql,docker,dockerfile,Postgresql,Docker,Dockerfile,我正在使用docker和dockerfile构建图像。我想构建一个PostgreSQL映像,因此我使用此dockerfile: ARG POSTGRES_USER=vetouz ARG POSTGRES_PASSWORD=*** ARG POSTGRES_DB=vetouz_mediatheque FROM postgres:latest USER postgres EXPOSE 5432 然后,我使用这个命令运行图像 docker run -e POSTGRES_PASSWORD=ve
ARG POSTGRES_USER=vetouz
ARG POSTGRES_PASSWORD=***
ARG POSTGRES_DB=vetouz_mediatheque
FROM postgres:latest
USER postgres
EXPOSE 5432
然后,我使用这个命令运行图像
docker run -e POSTGRES_PASSWORD=vetouz -d --name postgres postgres:latest
当我这样做时,角色vetouz
,密码和dbvetouz_mediatheque
不会被创建,我不明白为什么。我知道这一点,因为当我使用sudocker exec-it postgres bash
访问我的容器,然后运行psql-U vetouz
时,我得到的错误是角色vetouz不存在
如果我使用以下命令运行映像,它将起作用:
docker run -e POSTGRES_PASSWORD=*** -e POSTGRES_USER=vetouz -e POSTGRES_DB=vetouz_mediatheque -d --name postgres postgres:latest
但我宁愿在dockerfile中定义变量
知道它为什么不工作吗?请使用
ENV
而不是ARG
。参数仅在生成期间可用,环境也在运行时可用
来源
ENV
而不是ARG
。参数仅在生成期间可用,环境也在运行时可用
来源
ARG
,但使用env
变量在Docker映像中设置敏感信息不是一种安全的方法,我将解释原因
安全问题
但我宁愿在dockerfile中定义变量
对于不敏感的信息,这是可以的,但对于密码等敏感信息,这不是最佳做法,因为数据库凭据将以纯文本形式存储在docker文件中,即使使用ARG
设置ENV
var,它们也将在docker图像层中可用
docker run-e POSTGRES_PASSWORD=***-e POSTGRES_USER=vetouz-e POSTGRES_DB=vetouz_mediatehque-d--名称POSTGRES POSTGRES:latest
这在安全性方面也是一种不好的做法,因为现在数据库凭据被保存到bash历史记录中
在Linux机器中,您可以通过以下方式进行检查:
history | grep-i POSTGRES
更安全的方法
创建一个.env文件:
POSTGRES_USER=vetouz
POSTGRES_PASSWORD=your-password-here
POSTGRES_DB=vetouz_mediatheque
不要忘记将.env
文件添加到.gitignore
:
echo.env>>.gitignore
运行Docker容器
现在使用以下命令运行docker容器:
docker run--env file./.env-d--name postgres postgres:latest
您的问题
如前所述,您正在使用仅在构建Docker映像时可用的ARG
,但使用env
变量在Docker映像中设置敏感信息不是一种安全的方法,我将解释原因
安全问题
但我宁愿在dockerfile中定义变量
对于不敏感的信息,这是可以的,但对于密码等敏感信息,这不是最佳做法,因为数据库凭据将以纯文本形式存储在docker文件中,即使使用ARG
设置ENV
var,它们也将在docker图像层中可用
docker run-e POSTGRES_PASSWORD=***-e POSTGRES_USER=vetouz-e POSTGRES_DB=vetouz_mediatehque-d--名称POSTGRES POSTGRES:latest
这在安全性方面也是一种不好的做法,因为现在数据库凭据被保存到bash历史记录中
在Linux机器中,您可以通过以下方式进行检查:
history | grep-i POSTGRES
更安全的方法
创建一个.env文件:
POSTGRES_USER=vetouz
POSTGRES_PASSWORD=your-password-here
POSTGRES_DB=vetouz_mediatheque
不要忘记将.env
文件添加到.gitignore
:
echo.env>>.gitignore
运行Docker容器
现在使用以下命令运行docker容器:
docker run--env file./.env-d--name postgres postgres:latest