Docker运行时的Docker Golang onbuild自定义操作

I have a fairly easy Dockerfile for a Go app:

FROM golang:onbuild
EXPOSE 5000 5001

Now when I run it (not when building the image!) I would like to change a value in a html file which gets statically served, possibly using sed to use an environment variable previously specified with -e to docker run. How can I do that?

You can try something like this:

FROM golang:onbuild
COPY ./docker-entrypoint.sh /

EXPOSE 5000 5001
ENTRYPOINT ["/docker-entrypoint.sh"]

Note: you need to copy entry point file with your sed script somewhere into container (done on line 2)

and docker-entrypoint.sh with your sed script

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

- simple example of replacement line with new title (passed in run as env. variable) in index.html file

Note: just keep in mind to run sed only if environment variable was served as @STLMikey shows.

and run docker container with $ENVIRONMENT_VARIABLE

eg:

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

One option is to use the --entrypoint option during docker run:

docker run --entrypoint /some/sh/script.sh <imagename>

where script.sh is a file inside your container, and contains something like:

#!/bin/env bash    
if [[ "$myenvvar" == 'myvalue' ]]; then
    # sed your file here
else
    #don't do that
fi

If you dont like the idea of overriding the entrypoint at run time, you might consider using the CMD or ENTRYPOINT options in your Dockerfile.