如何在MAC的docker中运行GUI程序


1、下载docker


2、下载XQuartz


3、设置XQuqrtz参数,“允许从网络连接连接”


4、重新启动XQurtz 2.7.11( MacOS 10.15版本,需要2.7版本支持)


5、运行xhost并允许本机连接(在终端输入如下两行命令)

```

export IP=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')

xhost + $IP

```


5.5、如果出现xhost失败:xhost: unable to open display “”,尝试重启电脑(还是不行就没办法了)


6、执行docker,run命令或者exec命令都可以(-e DISPLAY=$IP:0参数是必须的,-it可选,具体命令请另行查找),例:下图


docker exec -it -e DISPLAY=$IP:0 containerName /bin/bash

————————————————

 

 

#!/bin/bash

# -----------------------------------------------------------------

# FileName: conf.cnf

# Date: 2020-01-09

# Author: jiftle

# Description:

# -----------------------------------------------------------------

DockerKey="dev-env"

DockerVer="latest"


# ------- 处理GUI显示的问题,原理:x11共享 -------

IP=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')




#!/bin/bash

# -----------------------------------------------------------------

# FileName: exec.sh

# Date: 2020-01-09

# Author: jiftle

# Description:

# -----------------------------------------------------------------

. ./conf.cnf


echo "  |--> 当前主机IP: $IP"


xhost + $IP


# docker exec -it ${DockerKey} bash

docker exec -it -e DISPLAY=$IP:0 dev-env bash


#!/bin/bash

# -----------------------------------------------------------------

# FileName: run.sh

# Date: 2020-01-09

# Author: jiftle

# Description:

# -----------------------------------------------------------------

. ./conf.cnf


echo "  |--> 当前主机IP: $IP"

# --------------- 定义变量 ------------------

GitPath="${HOME}/tg-git"

HostIp="$IP"


echo "------------- 运行[${DockerKey}:${DockerVer}]镜像的容器 ------------"


echo "---> 开始启动[${DockerKey}:${DockerVer}] Docker"


# -e GDK_SCALE \

# -e GDK_DPI_SCALE \

# ----------- 运行容器 ------------

docker run -itd \

`# 注释请忽略,----------- 设置名称 -------------` \

--name="${DockerKey}" \

`# 注释请忽略,----------- 工作目录映射 -------------` \

-w /root `# 默认工作目录` \

-v ${HOME}:/home/john `# 默认工作目录,映射` \

-v ${GitPath}:/home/john/git `# git仓库目录` \

`# 注释请忽略,----------- 用户密钥 -------------` \

-v ${HOME}/.ssh:/root/.ssh `# .ssh密钥` \

`# 注释请忽略,----------- 端口映射 -------------` \

-p 8022:22 `# ssh端口` \

-p 8001:8001 `# 日志仓库,预览服务` \

-p 8080:8080 `# web程序调试端口` \

-h "${DockerKey}" `# 机器名` \

--restart=always `# 自启动,容易导致挂载的分区,晚于docker` \

`# 注释请忽略,----------- 图形界面 -------------` \

-v /tmp/.X11-unix:/tmp/.X11-unix \

-e DISPLAY=${HostIp}:0 \

`# 镜像名` \

${DockerKey}:${DockerVer}

echo "---> 启动[${DockerKey}:${DockerVer}] Docker完毕"