Docker Golang在docker run上构建自定义操作

时间:2016-09-28 17:13:35

标签: go docker dockerfile

对于Go应用程序,我有一个相当简单的Dockerfile:

FROM golang:onbuild
EXPOSE 5000 5001

现在当我运行它时(不是在构建图像时!)我想更改静态服务的html文件中的值,可能使用sed来使用先前使用{{1}指定的环境变量到docker run。我怎么能这样做?

2 个答案:

答案 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中使用CMDENTRYPOINT选项。

答案 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容器

例如:

docker run -d -t -i -e ENVIRONMENT_VARIABLE='New website title' --name=container_name IMAGE_NAME