如何将带--env、--net、--volume的docker run命令转为可显示图像的docker-compose配置
问题根因与解决方案
核心错误原因
- 你混淆了docker-compose与原生docker run的作用范围:
docker-compose.yml里定义的网络、环境变量、挂载卷等配置,仅在使用docker-compose系列命令启动容器时生效,你后续直接用docker run -ti docker_test_docker_test启动容器时,没有携带任何对应参数,自然会出现显示异常、卷未挂载的问题。 - 你编写的
docker-compose.yml存在语法错误,且DISPLAY环境变量写死不通用。
修正后的docker-compose.yml
version: "3.7" services: docker_test: container_name: docker_test build: . environment: # 直接继承宿主机的DISPLAY环境变量,不需要写死固定值 - DISPLAY=${DISPLAY} volumes: - $HOME/.Xauthority:/root/.Xauthority - $HOME/docker_test/imgs:/imgs network_mode: "host" # 对应docker run的-it参数,保留交互终端能力 stdin_open: true tty: true
正确操作步骤
- 先给宿主机X服务授权,允许容器内的GUI程序调用显示能力:
xhost +local:root
- 不要使用原生docker run启动容器,改用docker-compose命令启动交互终端,配置会自动全部加载:
# --rm表示容器退出后自动删除,不需要可去掉该参数 docker-compose run --rm docker_test /bin/bash
- 进入容器后执行
python3 app.py即可正常显示GUI,挂载的/imgs目录也可以正常读写。
内容的提问来源于stack exchange,提问作者rluq
相关产品推荐
相关产品推荐

