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.