使用python代码在Docker容器之间共享卷

时间:2018-11-07 21:00:46

标签: python docker volume

也许我做错了,但是我似乎无法在运行自定义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上运行容器

1 个答案:

答案 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:

所以我想调试的步骤是:

  • 检查docker-compose.yml文件中所有卷的拼写
  • 检查在python代码中构建/引用路径的方式(Linux使用与Windows不同的格式)
  • 检查是否必须从python代码访问的路径确实存在