Я хочу заранее извиниться за то, что у меня нет конкретных примеров кода c, которыми я мог бы поделиться (хотя я включил свой файл docker -compose ниже, который может оказаться полезным, а может и нет). У меня странная проблема, которую я не могу отследить, и я не на 100% уверен, чем поделиться.
У меня есть django + настройка сельдерея, работающая в Docker (на основе cookiecutter- django). Сначала кажется, что все работает отлично. Я тщательно протестировал и использовал эту настройку за пределами из Docker, и задачи Dockerized Celery обычно ведут себя так, как я ожидал (т. Е. Как они поступали, когда они не были Dockerized).
Но здесь все становится странно. По разным причинам мне нужно загрузить некоторые файлы данных и создать временные файлы во время выполнения, которые я не могу просто поместить в свой файл docker. Одним из примеров является использование NamedTemporaryFile. Другой - установка файлов данных из Spacy . В обоих случаях мои сценарии хранят данные в / tmp (я знаю, что простой ответ - поместить их в мой файл docker, но, к сожалению, я не могу заранее предсказать, какие файлы мне понадобятся). Когда мой рабочий с сельдереем пытается получить доступ к файлам данных, которые он предположительно создал, загрузил и / или сохранил в / tmp, я продолжаю получать ошибки `` файл не найден ''. Странно то, что я не получаю никаких ошибок в моих журналах о том, что создание или загрузка файла завершилась неудачно ... конечно, файлов нет ... Если, используя консоль python в моем контейнере, я запускаю тот же код , у меня нет проблем, и файлы появляются в / tmp. Я не получаю последовательного сообщения об ошибке, и поведение по-разному проявляется в разных сценариях, поэтому трудно дать вам конкретное c сообщение об ошибке / трассировку стека. Общий элемент, по-видимому, связан с некоторой проблемой, которая возникает, когда моя задача с сельдереем пытается динамически хранить данные в / tmp, а затем сразу же после этого обращаться к ним. Я Docker новичок и не знаю, что делать дальше. Я подозреваю, что это может быть проблема с разрешением, но я пробовал chmodding / tmp на 777, и ничего не исправил. Я также подумал, что это может быть проблема с объемом, но в этом случае я не был уверен, почему я могу заставить все работать, если я использую bash внутри своего контейнера.
У кого-нибудь есть совет? Потратил пару дней, пытаясь отследить источник проблемы, и оказался в тупике. Мой файл docker и конфигурации - это в значительной степени простые ванильные копии настроек Django Cookiecutter по умолчанию.
version: '3'
volumes:
local_postgres_data: {}
local_postgres_data_backups: {}
services:
django: &django
build:
context: .
dockerfile: ./compose/local/django/Dockerfile
image: gremlin_gplv3_local_django
container_name: django
depends_on:
- postgres
- tika
- redis
volumes:
- .:/app
env_file:
- ./.envs/.local/.django
- ./.envs/.local/.postgres
ports:
- "8000:8000"
command: /start
postgres:
build:
context: .
dockerfile: ./compose/production/postgres/Dockerfile
image: gremlin_gplv3_production_postgres
container_name: postgres
volumes:
- local_postgres_data:/var/lib/postgresql/data
- local_postgres_data_backups:/backups
env_file:
- ./.envs/.local/.postgres
redis:
image: redis:5.0
container_name: redis
celeryworker:
<<: *django
image: gremlin_gplv3_local_celeryworker
container_name: celeryworker
depends_on:
- redis
- postgres
ports: []
command: /start-celeryworker
celerybeat:
<<: *django
image: gremlin_gplv3_local_celerybeat
container_name: celerybeat
depends_on:
- redis
- postgres
ports: []
command: /start-celerybeat
flower:
<<: *django
image: gremlin_gplv3_local_flower
container_name: flower
ports:
- "5555:5555"
command: /start-flower
tika:
image: lexpredict/tika-server
command: /start-tika