Dockerized Python Скрипты, имеющие проблемы с доступом к файлам, хранящимся в / tmp - PullRequest
0 голосов
/ 28 мая 2020

Я хочу заранее извиниться за то, что у меня нет конкретных примеров кода 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...