【问题标题】:docker run --env, --net and --volume options in docker-compose for displaying imagedocker-compose 中的 docker run --env、--net 和 --volume 选项用于显示图像
【发布时间】:2021-09-03 09:20:11
【问题描述】:

我正在尝试使用 docker-compose 文件中的选项复制 docker run 命令:

我的 Dockerfile 是:

FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update -y 
RUN apt-get install -y python3-pip python3-dev python3-opencv
RUN apt-get install -y libcanberra-gtk-module libcanberra-gtk0 libcanberra-gtk3-module

WORKDIR /

RUN mkdir /imgs

COPY app.py ./

CMD ["/bin/bash"]

我使用以下命令运行容器,以便它可以正确显示共享卷中的图像:

docker build -t docker_test:v1 .
docker run -it --net=host --env=DISPLAY --volume=$HOME/.Xauthority:/root/.Xauthority docker_test:v1

为了复制之前的命令,我尝试了下面的docker-compose文件:

version: "3.7"

services:   docker_test:
    container_name: docker_test
    build: .
    environment:
      - DISPLAY=:1
    volumes:
      - $HOME/.Xauthority:/root/.Xauthority
      - $HOME/docker_test/imgs:/imgs
    network_mode: "host"

但是,在从容器内部构建映像并运行应用脚本之后(映像复制到容器上,而不是从共享卷中):

docker-compose up
docker run -ti docker_test_docker_test
python3 app.py

出现以下错误:

Unable to init server: Could not connect: Connection refused

(OpenCV Image Reading:9): Gtk-WARNING **: 09:15:24.889: cannot open display: 

此外,卷似乎没有共享

【问题讨论】:

    标签: docker user-interface docker-compose


    【解决方案1】:

    docker run 从不查看docker-compose.yml 文件;运行容器所需的每个选项都需要直接在 docker run 命令中指定。相反,Compose 在运行长时间运行的进程方面比在运行交互式 shell 方面要好得多(并且您希望容器直接运行程序,就像您通常不启动 pythonREPL 并调用 @987654326 一样@ 从那里)。

    通过您的设置,首先您要通过 Compose 启动一个容器。这将立即退出(因为主容器命令是交互式 bash shell 并且它没有标准输入)。然后,您将使用默认选项启动第二个容器并在那里手动运行您的脚本。由于没有docker run -e DISPLAY 选项,它看不到那个环境变量。

    那么,这里首先要改变的是,使图像的CMD成为启动应用程序

    ...
    COPY app.py .
    CMD ./app.py
    

    然后运行docker-compose up(或docker run your-image)将启动应用程序,无需您进一步干预。您可能需要一些其他设置才能成功连接到主机显示器(传播$DISPLAY 未修改,将主机的 X 套接字安装到容器中);见Can you run GUI applications in a Linux Docker container?

    (如果你尝试访问主机显示并使用主机网络,请考虑像 Docker 这样的隔离系统是否真的是正确的工具;在 Python 虚拟环境中直接运行 ./app.py 会简单得多。 )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 2020-09-02
      • 2016-11-14
      相关资源
      最近更新 更多