【问题标题】:Docker-compose gives error when docker run works with same environment, volumes and devices当 docker run 使用相同的环境、卷和设备时,Docker-compose 会出错
【发布时间】:2022-01-03 19:08:04
【问题描述】:

我在 Raspberry Pi 3 (arm32v7) 上有一个 Python3 应用程序。该应用程序使用 picamera 定期拍摄照片,使用 Pillow 的图像分析检测运动,使用 Tensorflow 的深度学习检测对象,并将带有 base64 编码的带注释图像作为 JSON 有效负载发送到 MQTT 代理以进行进一步处理和显示带有 Node-RED 的画廊。

我已使用 Docker 将应用程序容器化,以安装在一组旧 Pi 上。我能够构建一个包含必要 Python 包的映像,然后使用 docker run 命令创建一个容器来启动应用程序。这可以按预期工作,但是该命令是很长的一行文本。为了简化,我创建了一个 docker-compose YML。我能够创建一个容器并启动应用程序,但它无法正常运行。

这里是 docker run 命令,带有 env。变量、共享卷和共享设备:

docker run --name nonamenow --rm --env USERID=admin --env PASSWD='wrongp@$$wordtryagain' --env MQTTIP='192.168.1.219' --env DELTA=60 --privileged=true -v /opt/vc:/opt/vc --env LD_LIBRARY_PATH=/opt/vc/lib --device /dev/vchiq -it sentry2:envenabled

以这种方式创建容器可以正常工作,并且图像开始流入图库。现在,这是我与docker-compose up 一起使用的 docker-compose YAML。

version: '3.6'

services:
  app:
    build: .
    container_name: sentrycam21
    image: sentry2:envenabled
    restart: always
    privileged: true
    environment:
    - LD_LIBRARY_PATH=/opt/vc/lib
    - USERID=admin
    - PASSWD='wrongp@$$wordtryagain'
    - MQTTIP='192.168.1.219'
    - DELTA=90
    - TOPIC=Surveillance/MainDoor
    volumes:
    - /opt/vc:/opt/vc
    devices: 
    - "/dev/vchiq:/dev/vchiq"

当程序尝试连接到 MQTT 代理时,这会在运行时失败。请注意,使用相同参数的其他方法正确建立了连接。我尝试删除 IP 地址周围的引号,但它只是挂起,没有任何进一步的反应。

如果您在我的 docker-compose YAML 中发现任何明显错误,请告诉我。感谢您的帮助。

【问题讨论】:

    标签: python-3.x docker docker-compose raspberry-pi3


    【解决方案1】:
    - MQTTIP='192.168.1.219'
    

    不等于

    - "MQTTIP=192.168.1.219"
    

    我猜后者是你想要的。

    1. 如果您在撰写文件中加入美元符号,则需要将其加倍。
        - "PASSWD=wrongp@$$$$wordtryagain"
    

    ps: 您可以尝试在 python 中打印这样的 env 来验证点 (1):

    import os
    print(os.environ)
    

    【讨论】:

    • 太棒了,感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2015-09-21
    • 1970-01-01
    相关资源
    最近更新 更多