Возможно, я ошибаюсь, но я не могу заставить общий том работать между двумя контейнерами докеров, выполняющими пользовательский код Python.
Я использую следующий docker-compose.yml:
version: "2"
services:
rabbitmq:
image: username/rabbitmq
ports:
- 15672:15672
- 5672:5672
producer:
image: username/producer
depends_on:
- rabbitmq
volumes:
- pdffolder:/temp
consumer:
image: username/consumer
depends_on:
- producer
volumes:
- pdffolder:/temp
volumes:
pdffolder:
Идея состоит в том, что служба производителя опрашивает сервер обмена для получения информации и pdf-файла. Затем служба поддержки должна отправить эту информацию и файл PDF в другое место. Во время этого действия я должен временно сохранить pdf локально.
Я получаю доступ к томам из пользовательского кода Python следующим образом:
производитель
# attachment = object I get when requesting attachments from an exchange server
# path to pdf to be saved
pdf_path = os.path.join("temp", attachment.name)
with open(pdf_path, 'wb') as f:
f.write(attachment.content)
# now in this container, /temp/attachment.pdf exists. I then send this path in a message to the consumer (along with other information)
Потребитель
# consumer tries to find path created by producer (/temp/attachment.pdf) via
pdf_path = os.path.join("temp", "attachment.pdf")
Через командную строку я вижу, что контейнер-производитель записывает файлы в temp / attachment.pdf, как и ожидалось. Однако потребительский контейнер не видит файлов (что приводит к ошибкам).
Кстати, я запускаю контейнеры в докере для Windows