如何在MacBook Pro上的Docker容器中运行tkinter?

2skhul33  于 2023-11-17  发布在  Docker
关注(0)|答案(1)|浏览(98)

我试图在MacBook Pro上的Docker容器中运行一个使用tkinter模块的python GUI应用程序。
所以我安装了XQuartz,并按照this tutorial在docker容器中运行了一个简单的tkinter程序。
这是我收到的错误信息

Traceback (most recent call last):
  File "/app/tkinter_app.py", line 4, in <module>
    root_window = tk.Tk()
  File "/usr/local/lib/python3.8/tkinter/__init__.py", line 2270, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display "/private/tmp/com.apple.launchd.knFz0UzqxP/org.xquartz:0"

字符串
我的DISPLAY环境变量的值是/private/tmp/com.apple.launchd.knFz0UzqxP/org.xquartz:0
有人知道如何解决这个错误吗?
下面是教程中的Dockerfile

# Slim version of Python
FROM python:3.8.12-slim

# Download Package Information
RUN apt-get update -y

# Install Tkinter
RUN apt-get install tk -y

# Commands to run Tkinter application
CMD ["/app/tkinter_app.py"]
ENTRYPOINT ["python3"]


/app/tkinter_app.py的第4行是root_window = tk.Tk()
我的MacOS版本是11.6.1

qzlgjiam

qzlgjiam1#

我做了一个小的docker镜像,里面有xeyes,用来在我的Mac上用XQuartz X11服务器测试X11客户端,用这个作为我的Dockerfile

# Base Image
FROM alpine:latest

RUN apk update && \
    apk add --no-cache xeyes

# Set a working directory
WORKDIR /work

# Start a shell by default
CMD ["ash"]

字符串
然后我把它做成这样:

docker build -t setchell/xeyes .


我用这个来运行它:

# Prerequisites
#   brew cask install xquartz
    
# Set your Mac IP address
IP=$(/usr/sbin/ipconfig getifaddr en0)

# Allow connections from Mac to XQuartz
/opt/X11/bin/xhost + "$IP"

# Run container
docker run -it -e DISPLAY="${IP}:0" -v /tmp/.X11-unix:/tmp/.X11-unix setchell/xeyes


一旦进入容器,我就运行:

xeyes


结果是这样的:


的数据
请注意,我必须在我的Mac上启动XQuartz,转到 “首选项”,然后 “安全”,勾选(检查)两个选项,并在上述过程之前重新启动我的Mac。
可能有更简单的方法,有些步骤可能是不必要的,如果有人知道一个更简单的方法,请ping我。我总是很乐意学习。

相关问题