Pass port as environment variable to docker for deploying streamlit app


I am trying to deploy a streamlit app using Docker. I would like to be able to pass the port to the streamlit run command in my Docker container (I am currently using Docker CMD to run streamlit) as an environment variable. However, there are documented issues with passing environment variables to Docker CMD, and the suggested workaround is to use the sh -c form of CMD, see issues here and here. However, this does not work with streamlit. For example if I modify my streamlit run command to look like this CMD ["sh", "-c", "streamlit", "run", "", "--server.port=${PORT}", "--server.address="] (where ENV port 8502), streamlit thinks I am trying to pass sh -c to it. Has anyone found a workaround for this issue?


Sounds like your docker ENTRYPOINT is specific to streamlit, if you’re able to share it someone might be able to point you in a better direction.
You might be able to get away with a CMD ["", "--server.port=${PORT}", "--server.address="]

If you can change your dockerfile and add an script it might be the most straightforward way to extend these needs.

# Rest of Dockerfile...
# ...

ENTRYPOINT [ "/bin/bash" ]
CMD [ "" ]

and the like


echo "Running Streamlit app"
streamlit run --server.port=$PORT --server.address=

example in one of my repos. I like having access to bash for debugging / looking around in the container if things go wrong.

Hmm, using the Dockerfile to run a shell script and grabbing the environment variable from the shell script my work. I’ll give it a shot.