由于环境错误而无法安装软件包:[Errno 39]目录不为空:'/ tmp / pip-install-xo15v1tw / mock / mock'
我创建了一个高山容器。 Dockerfile是
FROM alpine:latest
我构建并运行它。
#sudo docker build -t alpine .
#sudo docker run -it alpine
然后,我安装了python3
#apk add python3
然后,我尝试安装模拟软件包,但出现错误。
#pip3 install mock
...
Could not install packages due to an EnvironmentError: [Errno 39] Directory not empty: '/tmp/pip-install-xo15v1tw/mock/mock'
我尝试安装其他python软件包,但始终出现相同的错误。 我在WSL的容器上运行。高山版本为3.9.4。
我该如何解决这个问题?
答案 0 :(得分:0)
我在Windows 1903的WSL,build 18362.145(在我的测试示例如下)中运行Docker(在Ubuntu 16.04中为17.09.0版,在Ubuntu 18.04中为18.06.1版本)时遇到了完全相同的问题。
该问题似乎与默认的overlay2
有关(并且还影响了较早的overlay
)storage driver。通过将以下内容添加到/etc/docker/daemon.json
来更改为vfs
存储驱动程序,可使pip
正常工作:
{
"storage-driver": "vfs"
}
但是,vfs
存储驱动程序是not recommended,因为它的性能不佳且磁盘使用率很高(它在每层中都创建了文件系统的完整副本)。这对于docker build
来说尤其重要,在Dockerfile
中为overlay2
中的每一行都制作了文件系统的完整副本。因此,我不确定这是否是解决方案,但至少可以指出问题出在哪里。没有其他存储驱动程序似乎与WSL兼容。
以下是两种完全不同的情况,其中overlay
/ overlay2
存储驱动程序似乎导致与存储根本无关的错误。我确定这也会导致许多其他错误。我不确定这是否是Windows 1903之前的问题(当时我没有在WSL中尝试使用docker),而且我也不确定是什么原因造成的(是WSL方面还是{{1 }} / overlay
一方?-也许比我了解更多的人对此发表评论。
使用overlay2
/ overlay
存储驱动程序时的测试如下:
$ docker run -it alpine
/ # apk add --update py3-pip
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/11) Installing libbz2 (1.0.6-r6)
(2/11) Installing expat (2.2.6-r0)
(3/11) Installing libffi (3.2.1-r6)
(4/11) Installing gdbm (1.13-r1)
(5/11) Installing xz-libs (5.2.4-r0)
(6/11) Installing ncurses-terminfo-base (6.1_p20190105-r0)
(7/11) Installing ncurses-terminfo (6.1_p20190105-r0)
(8/11) Installing ncurses-libs (6.1_p20190105-r0)
(9/11) Installing readline (7.0.003-r1)
(10/11) Installing sqlite-libs (3.28.0-r0)
(11/11) Installing python3 (3.6.8-r2)
Executing busybox-1.29.3-r10.trigger
OK: 68 MiB in 25 packages
/ # pip3 install mock
Collecting mock
Downloading https://files.pythonhosted.org/packages/05/d2/f94e68be6b17f46d2c353564da56e6fb89ef09faeeff3313a046cb810ca9/mock-3.0.5-py2.py3-none-any.whl
Could not install packages due to an EnvironmentError: [Errno 39] Directory not empty: '/tmp/pip-install-btvxatk0/mock/mock'
/ #
使用vfs
存储驱动程序时:
$ docker run -it alpine
/ # apk add --update py3-pip
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/11) Installing libbz2 (1.0.6-r6)
(2/11) Installing expat (2.2.6-r0)
(3/11) Installing libffi (3.2.1-r6)
(4/11) Installing gdbm (1.13-r1)
(5/11) Installing xz-libs (5.2.4-r0)
(6/11) Installing ncurses-terminfo-base (6.1_p20190105-r0)
(7/11) Installing ncurses-terminfo (6.1_p20190105-r0)
(8/11) Installing ncurses-libs (6.1_p20190105-r0)
(9/11) Installing readline (7.0.003-r1)
(10/11) Installing sqlite-libs (3.28.0-r0)
(11/11) Installing python3 (3.6.8-r2)
Executing busybox-1.29.3-r10.trigger
OK: 68 MiB in 25 packages
/ # pip3 install mock
Collecting mock
Downloading https://files.pythonhosted.org/packages/05/d2/f94e68be6b17f46d2c353564da56e6fb89ef09faeeff3313a046cb810ca9/mock-3.0.5-py2.py3-none-any.whl
Collecting six (from mock)
Downloading https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Installing collected packages: six, mock
Successfully installed mock-3.0.5 six-1.12.0
You are using pip version 18.1, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
/ #
我还发现,在apt update
官方映像中运行ububtu
时,使用overlay2
/ overlay
存储驱动程序时得到以下输出:
$ docker run -it ubuntu
root@d716ab2aee5c:/# apt update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Err:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
At least one invalid signature was encountered.
Err:2 http://archive.ubuntu.com/ubuntu bionic InRelease
At least one invalid signature was encountered.
Get:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Err:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
At least one invalid signature was encountered.
Err:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
At least one invalid signature was encountered.
Reading package lists... Done
W: GPG error: http://security.ubuntu.com/ubuntu bionic-security InRelease: At least one invalid signature was encountered.
E: The repository 'http://security.ubuntu.com/ubuntu bionic-security InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: http://archive.ubuntu.com/ubuntu bionic InRelease: At least one invalid signature was encountered.
E: The repository 'http://archive.ubuntu.com/ubuntu bionic InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: http://archive.ubuntu.com/ubuntu bionic-updates InRelease: At least one invalid signature was encountered.
E: The repository 'http://archive.ubuntu.com/ubuntu bionic-updates InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: http://archive.ubuntu.com/ubuntu bionic-backports InRelease: At least one invalid signature was encountered.
E: The repository 'http://archive.ubuntu.com/ubuntu bionic-backports InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
root@d716ab2aee5c:/#
使用vfs
存储驱动程序时:
$ docker run -it ubuntu
root@1422a0121aa2:/# apt update
Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:5 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [717 kB]
Get:6 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [5436 B]
Get:7 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [535 kB]
Get:8 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1344 kB]
Get:9 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [4169 B]
Get:10 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB]
Get:11 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB]
Get:12 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB]
Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1220 kB]
Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [10.8 kB]
Get:15 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [7239 B]
Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [837 kB]
Get:17 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [3902 B]
Get:18 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [2496 B]
Fetched 16.7 MB in 26s (641 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
12 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@1422a0121aa2:/#
答案 1 :(得分:-1)
您需要先安装pip,然后再在apk add py3-pip
上方添加此行pip3 install mock