对于Go应用程序,我有一个相当简单的Dockerfile:
FROM golang:onbuild
EXPOSE 5000 5001
现在当我运行它时(不是在构建图像时!)我想更改静态服务的html文件中的值,可能使用sed
来使用先前使用{{1}指定的环境变量到docker run。我怎么能这样做?
答案 0 :(得分:1)
一种选择是在泊坞窗运行期间使用--entrypoint
选项:
docker run --entrypoint /some/sh/script.sh <imagename>
其中script.sh是容器内的文件 ,其中包含以下内容:
#!/bin/env bash
if [[ "$myenvvar" == 'myvalue' ]]; then
# sed your file here
else
#don't do that
fi
如果您不喜欢在运行时覆盖入口点的想法,可以考虑在Dockerfile中使用CMD
或ENTRYPOINT
选项。
答案 1 :(得分:1)
您可以尝试这样的事情:
FROM golang:onbuild
COPY ./docker-entrypoint.sh /
EXPOSE 5000 5001
ENTRYPOINT ["/docker-entrypoint.sh"]
注意:您需要将带有sed脚本的入口点文件复制到容器中(在第2行完成)
使用sed
脚本和 docker-entrypoint.sh
# execute sed only **if variable exists**
sed -ri "s/<title>.*/<title>$ENVIRONMENT_VARIABLE</title>/" /path_to_html_file/index.html
- index.html文件中带有新标题(在env。变量中运行)的替换行的简单示例
注意:请注意,只有在环境变量作为@STLMikey显示的情况下运行时才运行sed。
并使用$ENVIRONMENT_VARIABLE
例如:
docker run -d -t -i -e ENVIRONMENT_VARIABLE='New website title' --name=container_name IMAGE_NAME