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

Go app有一个相当简单的Dockerfile:

FROM golang:onbuild EXPOSE 5000 5001 

现在,当我运行它(而不是当build立图像!)我想改变一个html文件中获取静态服务的值,可能使用sed使用先前用-e指定的环境variables到docker运行。 我怎样才能做到这一点?

你可以尝试这样的事情:

 FROM golang:onbuild COPY ./docker-entrypoint.sh / EXPOSE 5000 5001 ENTRYPOINT ["/docker-entrypoint.sh"] 

注意 :你需要将你的sed脚本的入口点文件复制到容器中(在第二行完成)

docker-entrypoint.sh与您的sed脚本

 # execute sed only **if variable exists** sed -ri "s/<title>.*/<title>$ENVIRONMENT_VARIABLE</title>/" /path_to_html_file/index.html 

– 在index.html文件中用新标题replace行的简单示例(作为env。variables运行传入)

注意 :只要记住只在环境variables作为@STLMikey显示时才运行sed。

并使用$ENVIRONMENT_VARIABLE运行docker容器

例如:

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

一个选项是在--entrypoint运行期间使用--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 

如果您不喜欢在运行时重写入口点的想法,则可以考虑在ENTRYPOINT使用CMDENTRYPOINT选项。