也许我做错了,但是我似乎无法在运行自定义python代码的两个docker容器之间使共享卷工作。
我正在使用以下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的docker上运行容器
答案 0 :(得分:0)
我想我知道出了什么问题。我在生产者和使用者的Dockerfile中都使用了以下内容:
FROM python:3.7-slim
WORKDIR /main
ADD . /main
RUN pip install --trusted-host pypi.python.org -r requirements.txt
CMD ["python", "-u", "main.py"]
因为我将python代码移动到了两个容器中的/ main文件夹中,所以稍后通过docker-compose创建的temp文件夹位于/ main / temp,而不仅仅是/ temp。有点奇怪,因为main.py应该与/ temp处于同一级别,但是嘿,它可以工作。我将其与以下docker-compose.yml一起使用:
version: "2"
services:
rabbitmq:
image: username/rabbitmq
ports:
- 15672:15672
- 5672:5672
producer:
image: username/producer
depends_on:
- rabbitmq
volumes:
- pdffolder:/main/temp
consumer:
image: username/consumer
depends_on:
- producer
volumes:
- pdffolder:/main/temp
volumes:
pdffolder:
所以我想调试的步骤是: