sanic-docker icon indicating copy to clipboard operation
sanic-docker copied to clipboard

Include the WORKDIR option in Dockerfile and mkdir /srv error

Open NumesSanguis opened this issue 5 years ago • 0 comments

Proposed changes:

FROM sanicframework/sanic:LTS

RUN mkdir -p /srv  # <-- by adding -p, it will do nothing if the folder already exists
COPY . /srv
WORKDIR /srv  # <-- new

EXPOSE 8888

ENTRYPOINT ["python3", "my-sanic-server.py"]  # <-- removed /srv/ 

Rationale

If WORKDIR is not set, all paths referred to in my-sanic-server.py will start from root / instead of /srv. This breaks relative paths in "my-sanic-server.py" when accessing other files in the container or e.g. creating logs.

User story

I modified the Docker file found under base to include SQLAlchemy and copied the equivalent of "my-sanic-server.py" to /srv/ + a SQLite3 database (sample.db). My Python file uses a relative path to access sample.db. I didn't have any problems when running locally, but in a Docker container I was getting errors as: sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: foo. Originally I thought it was a permission problem ("users" inside a Docker container inheriting the same permissions of the host OS's user with the same UID), but I finally found out that the issue was with the path. It was solved by setting WORKDIR.


mkdir

Also, RUN mkdir /srv in your README to create Docker images based on FROM sanicframework/sanic:LTS does not work, as it gives the error:

mkdir: cannot create directory ‘/srv’: File exists

NumesSanguis avatar Feb 18 '20 13:02 NumesSanguis