作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Web 应用程序,我想在 Docker 上运行它以进行测试。该应用程序使用数据库作为存储,并在环境变量 (JSON) 中维护数据库的配置。您可以在下面看到我的 Dockerfile 中的 env 变量定义(另请参阅下面我的方法)
ENV CONFIG '{ \
"credentials":{ \
"hostname": "172.17.0.5", \
"password": "PWD", \
"port": "1234", \
"username": "${USER}" \
}, \
"name":"database", \
"tags":[] \
}, \
...
如果我对数据库的所有参数进行硬编码,一切正常,但我不想仅仅因为数据库的 IP 地址已更改而更改我的 Dockerfile。
因此我想使用 Docker build-args。
我已经尝试了两种方法:
RUN CONFIG=$(echo $CONFIG | sed 's/PWD/'$db_pwd'/g')
第一种方法没有替代品,所以 ${USER} 是 ${USER}。第二种方法似乎可行(至少在终端中),但似乎变量赋值不起作用。
您知道我如何才能完成这项工作吗?随意建议其他方法。我只是不想在我的 Dockerfile 中使用硬编码参数。
谢谢!
最佳答案
变量扩展只能在双引号字符串中起作用。这是有效的:
ENV CONFIG "{ \
\"credentials\":{ \
\"hostname\": \"172.17.0.5\", \
\"password\": \"PWD\", \
\"port\": \"1234\", \
\"username\": \"${USER}\" \
}, \
\"name\":\"database\", \
\"tags\":[] \
}"
一个简单的例子:
FROM alpine
ENV USER foo
ENV CONFIG "{ \
\"credentials\":{ \
\"hostname\": \"172.17.0.5\", \
\"password\": \"PWD\", \
\"port\": \"1234\", \
\"username\": \"${USER}\" \
}, \
\"name\":\"database\", \
\"tags\":[] \
}"
ENTRYPOINT env | sort
_
$ docker build -t test .
$ docker run -it --rm test
CONFIG={ "credentials":{ "hostname": "172.17.0.5", "password": "PWD", "port": "1234", "username": "foo" }, "name":"database", "tags":[] }
HOME=/root
HOSTNAME=43d29bd12bc5
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1
TERM=xterm
USER=foo
关于bash - Dockerfile:如何用 build-arg 替换环境变量中的占位符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44781979/
我是一名优秀的程序员,十分优秀!