James Cooper
James Cooper

Reputation: 57

Docker Container stops immediately (Flask/Python/Megatutorial)

I've been following the flask megatutorial by the inestimable Miguel Grinberg (https://learn.miguelgrinberg.com/read/mega-tutorial/ch19.html), and recently hit on a snag in deployment.

The docker run command starts the container and then it immediately stops. It isn't showing up in docker ps -a either. I've trawled through lots of responses here which seem to suggest that the solution is to add "-it" to the docker run command however this does not solve the issue.

Here's my dockerfile:

FROM python:3.6-alpine

RUN adduser -D james

WORKDIR /home/myflix

COPY requirements.txt requirements.txt
RUN python -m venv venv
RUN venv/bin/pip install -r requirements.txt
RUN venv/bin/pip install gunicorn pymysql

COPY app app
COPY migrations migrations
COPY myflix.py config.py boot.sh ./
RUN chmod +x boot.sh

ENV FLASK_APP myflix.py

RUN chown -R james:james ./
USER james

EXPOSE 5000
ENTRYPOINT ["./boot.sh"]

My image is called myflix:secondattempt.

The command used to start the container:

sudo docker run --name myflixcont -d -p 8000:5000 --rm myflix:secondattempt

As I said, I've already tried dropping in various combinations of "-i" and "-t" in front of the "-d" to no avail.

Upvotes: 2

Views: 1869

Answers (1)

Amir Hossein Baghernezad
Amir Hossein Baghernezad

Reputation: 4085

-it means interactive tty.
You can not use -it in conjunction with -d which means detached.
Remove -d and add -it:

docker run --name myflixcont -it -p 8000:5000 --rm myflix:secondattempt

Another point (with the purpose of helping you) is that ENTRYPOINT runs in exec mode. meaning that it does not start a bash or dash itself. You should specify it manually and explicitly:

ENTRYPOINT ["sh", "file.sh"]
# or
ENTRYPOINT ["bash", "file.sh"]

Upvotes: 1

Related Questions