【发布时间】:2022-06-13 00:04:20
【问题描述】:
我正在尝试在我的 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。
【问题讨论】:
-
最简单的方法几乎肯定是在 Docker 之外运行这个应用程序,也许是在 Python 虚拟环境中。您的 Dockerfile 似乎缺少将您的应用程序复制到映像中的
COPY行,而ENTRYPOINT拆分很奇怪;这些事情中的任何一个都会导致问题吗?你是如何运行容器的?问题与您的应用程序源有关,还是只是运行应用程序试图将 MacOS X 服务器连接到隔离容器? -
DISPLAY 环境变量好像不对,我没见过这种形式的DISPLAY。
-
@DavidMaze 我只想正确运行tutorial。
-
@MarkSetchell,非常感谢。您的代码在我的机器上成功运行。
标签: python-3.x macos docker tkinter