#30647 closed Bug (fixed)
[FATAL] FileNotFoundError with runserver command inside Docker container
| Reported by: | Bobby Steinbach | Owned by: | Tom Forbes |
|---|---|---|---|
| Component: | Core (Other) | Version: | 2.2 |
| Severity: | Release blocker | Keywords: | docker docker-compose autoreload |
| Cc: | Tom Forbes | Triage Stage: | Accepted |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Summary
Trying to run the development server in a container with volume-mounted source is throwing a FileNotFoundError. I've verified that the issue is consistently reproducible with Django==2.2.3 and not present in Django==2.1.4.
Trace
**INFO** /code/publications/models.py changed, reloading.
**INFO** Watching for file changes with StatReloader
Performing system checks...
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 60, in execute
super().execute(*args, **options)
File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 95, in handle
self.run(**options)
File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 102, in run
autoreload.run_with_reloader(self.inner_run, **options)
File "/usr/local/lib/python3.6/site-packages/django/utils/autoreload.py", line 587, in run_with_reloader
start_django(reloader, main_func, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/utils/autoreload.py", line 572, in start_django
reloader.run(django_main_thread)
File "/usr/local/lib/python3.6/site-packages/django/utils/autoreload.py", line 289, in run
autoreload_started.send(sender=self)
File "/usr/local/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 175, in send
for receiver in self._live_receivers(sender)
File "/usr/local/lib/python3.6/site-packages/django/dispatch/dispatcher.py", line 175, in <listcomp>
for receiver in self._live_receivers(sender)
File "/usr/local/lib/python3.6/site-packages/django/utils/translation/reloader.py", line 16, in watch_for_translation_changes
absolute_path = path.absolute()
File "/usr/local/lib/python3.6/pathlib.py", line 1129, in absolute
obj = self._from_parts([os.getcwd()] + self._parts, init=False)
FileNotFoundError: [Errno 2] No such file or directory
Configuration
Dockerfile
FROM python:3.6.7-alpine3.7 RUN mkdir /code WORKDIR /code RUN apk add postgresql-dev libffi-dev build-base musl-dev RUN apk add linux-headers ADD requirements.txt . RUN pip install -r requirements.txt EXPOSE 3031 ADD cs /code
docker-compose
version: '3.7'
services:
db:
image: postgres
volumes:
- ./pg_data:/var/lib/postgresql/data
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
POSTGRES_DB: postgres
app:
build:
context: .
volumes:
- ./cs/:/code/
ports:
- "8000:8000"
env_file: .env
command: ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Change History (13)
comment:1 by , 6 years ago
| Cc: | added |
|---|
comment:2 by , 6 years ago
comment:3 by , 6 years ago
| Component: | Uncategorized → Core (Other) |
|---|
comment:4 by , 6 years ago
Is this while using Docker for Mac? Could it be related to this Docker issue, as it seems it’s being thrown in the cwd call:
comment:5 by , 6 years ago
| Resolution: | → needsinfo |
|---|---|
| Status: | new → closed |
I'm thinking to close this as needsinfo for the moment. I'm very happy to re-open it if we can show that Django is at fault. Or if we want to provide a workaround in any case... (— Tom, happy to follow your lead there.)
@steinbachr please do add the extra information. I do mean the "very happy to re-open" :) Thanks.
comment:6 by , 6 years ago
@Tom Forbes on my machine it is happening all the time. I can change my requirements to downgrade to Django==2.1.4 and rebuild the image, resulting in a working container. Then, I can upgrade to Django==2.2.3 and rebuild, resulting in a broken container, consistently.
Some system information:
Mac OS Version: 10.13.6 (High Sierra)
Docker version 18.09.2, build 6247962
docker-compose version 1.23.2, build 1110ad01
Let me know if there's any additional info I can provide to help
follow-up: 11 comment:7 by , 6 years ago
| Resolution: | needsinfo |
|---|---|
| Status: | closed → new |
| Triage Stage: | Unreviewed → Accepted |
I'm going to re-open this Carlton, if that's OK. While this isn't Django's fault, it is a regression since 2.1 and it apparently does happen reproducibly.
Patch: https://github.com/django/django/pull/11584
Bobby: I would absolutely love if you could find some time to test this patch. It should be pretty simple, if you can run:
python -mpip install https://github.com/orf/django/archive/test-file-not-found.zip
Unfortunately this will be a 100+mb tarball (as it includes the whole repository history), but it's the latest 2.2x branch with my patch applied. Please let me know if the issue still occurs!
comment:8 by , 6 years ago
| Has patch: | set |
|---|---|
| Owner: | changed from to |
| Status: | new → assigned |
comment:9 by , 6 years ago
| Severity: | Normal → Release blocker |
|---|
comment:10 by , 6 years ago
I'm going to re-open this Carlton, if that's OK.
Absolutely Tom! That was the hope. 🙂
comment:11 by , 6 years ago
Tom, I'll give that a try now and report back.
Replying to Tom Forbes:
I'm going to re-open this Carlton, if that's OK. While this isn't Django's fault, it is a regression since 2.1 and it apparently does happen reproducibly.
Patch: https://github.com/django/django/pull/11584
Bobby: I would absolutely love if you could find some time to test this patch. It should be pretty simple, if you can run:
python -mpip install https://github.com/orf/django/archive/test-file-not-found.zipUnfortunately this will be a 100+mb tarball (as it includes the whole repository history), but it's the latest 2.2x branch with my patch applied. Please let me know if the issue still occurs!
First glance, this looks like some Docker weirdness:
File "/usr/local/lib/python3.6/site-packages/django/utils/translation/reloader.py", line 16, in watch_for_translation_changes absolute_path = path.absolute() File "/usr/local/lib/python3.6/pathlib.py", line 1129, in absolute obj = self._from_parts([os.getcwd()] + self._parts, init=False) FileNotFoundError: [Errno 2] No such file or directoryThat's a standard library call raising the error, so why's that not working?
@steinbachr it would be helpful if you could put a breakpoint in there and try to work out exactly what's going on. (That call should work. Why isn't it? Is there an obvious something that would?)
Why the regression between 2.1 and 2.2? We were using
os.pathpreviously I guess... Still, this should be something that works, so a bit more digging is needed.