【发布时间】:2021-09-17 04:11:23
【问题描述】:
我有一个错误:
File "/usr/local/lib/python3.6/site-packages/graphviz/backend.py", line 244, in pipe
out, _ = run(cmd, input=data, capture_output=True, check=True, quiet=quiet)
File "/usr/local/lib/python3.6/site-packages/graphviz/backend.py", line 167, in run
raise ExecutableNotFound(cmd)
graphviz.backend.ExecutableNotFound: failed to execute ['dot', '-Tpng'], make sure the Graphviz executables are on your systems' PATH
当我这样做时在我的 Mac 中:
dot -V
我明白了:
dot - graphviz version 2.47.3 (20210619.1520)
当我这样做时:
which dot
我明白了:
/usr/local/bin/dot
似乎 docker 不认识这个包。我试着做:
$ export PATH="${PATH}:/usr/local/bin"
如Where do I add Graphviz's Executable on a Mac 中所述 但这并不能解决问题。
当我在码头时:
pip install graphviz
上面写着:
Requirement already satisfied: graphviz in /usr/local/lib/python3.6/site-packages (0.15)
如何让 docker 识别可执行文件?
我不能在 docker 中执行 brew install graphviz 这个命令仅在 Mac 终端中被接受,但在 docker 中不被接受。
【问题讨论】:
-
容器有自己独立的文件系统和运行环境;它不能使用安装在 Docker 外部主机上的二进制文件(尤其是在主机和容器运行不同操作系统的 Mac 上)。您需要在镜像的 Dockerfile 中安装该软件包,可能使用 Debian
apt-get工具。 -
@DavidMaze 我怎样才能为正在运行的 docker 做到这一点?
-
构建一个新镜像,停止并删除现有容器,然后
docker run从更新的镜像中创建一个新容器。 -
@DavidMaze 为什么我不能在 docker 运行时“即时”执行此操作?
-
因为一旦容器退出,您在容器文件系统中更改的任何内容都会丢失;因为您希望能够检查源代码控制构建映像和容器所需的步骤。此外,删除和重新创建容器非常便宜,没有理由避免它。