Is there a way to automatically activate a virtualenv as a docker entrypoint?
Unfortunately zappa requires that it and all of my apps dependencies be installed in a python virtual environment.
So I have rebuilt my docker image and moved everything into a virtual environment in it.
The problem is that now i can’t run commands like:
docker exec <container> flask <sub command>
because flask is installed in a virtual environment which has not been activated.
I can still do this:
host$ docker exec -it <container> bash container$ source venv/bin/activate container$ flask <sub command>
Also, I can no longer run my default Dockerfile CMD (gunicorn) because that is also is my virtual environment.
Does this make any more sense?
2 Solutions collect form web for “Is there a way to automatically activate a virtualenv as a docker entrypoint?”
As an alternative to just sourcing the script inline with the command, you could make a script that acts as an
ENTRYPOINT. An example
entrypoint.sh would look something like:
#!/bin/sh source venv/bin/activate exec "$@"
Then in your
Dockerfile you would copy this file and set it as the
FROM myimage COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]
Now you can run it like
docker run mynewimage flask <sub command> or
docker run mynewimage gunicorn.
docker exec <container> sh -c 'source venv/bin/activate; flask <sub command>'
Your command can be:
CMD sh -c 'source venv/bin/activate; gunicorn...'