gpt4 book ai didi

postgresql - 我如何处理密码和 dockerfiles?

转载 作者:行者123 更新时间:2023-11-29 13:24:20 25 4
gpt4 key购买 nike

我为托管 postgresql 服务器的 docker 创建了一个镜像。在 dockerfile 中,环境变量“USER”,我将一个常量密码传递到 psql 的运行中:

USER postgres
RUN /etc/init.d/postgresql start && psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" && createdb -O docker docker

理想情况下,在此图像上调用“docker run”之前或之后,我希望调用者必须将这些详细信息输入命令行,这样我就不必将它们存储在任何地方。

我不太确定该怎么做。 docker 是否支持将标准输入读入环境变量?或者也许有更好的方法一起处理这一切?

最佳答案

在构建时

您可以使用 build arguments在你的 Dockerfile 中:

ARG password=defaultPassword
USER postgres
RUN /etc/init.d/postgresql start && psql --command "CREATE USER docker WITH SUPERUSER PASSWORD '$password';" && createdb -O docker docker

然后构建:

$ docker build --build-arg password=superSecretPassword .

在运行时

要在运行时设置密码,您可以使用环境变量 (ENV),您可以在入口点脚本 (ENTRYPOINT) 中对其求值:

ENV PASSWORD=defaultPassword
ADD entrypoint.sh /docker-entrypoint.sh
USER postgres
ENTRYPOINT /docker-entrypoint.sh
CMD ["postgres"]

在入口点脚本中,您可以在容器启动后立即使用给定的密码创建一个新用户:

pg_ctl -D /var/lib/postgresql/data \
-o "-c listen_addresses='localhost'" \
-w start
psql --command "CREATE USER docker WITH SUPERUSER PASSWORD '$password';"
postgres pg_ctl -D /var/lib/postgresql/data -m fast -w stop
exec $@

您还可以查看 Dockerfileentrypoint scriptofficial postgres image ,我从中借用了这个答案中的大部分代码。

安全注意事项

在环境变量(构建和运行时)中存储诸如密码之类的 secret 并不是非常安全(不幸的是,据我所知,Docker 目前并没有为此提供任何更好的解决方案)。关于这个话题的有趣讨论可以在 this question 中找到。 .

关于postgresql - 我如何处理密码和 dockerfiles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com