我正在尝试通过 apache/spark-py 在 docker 中运行我的 pyspark 测试套件。
但是当我尝试通过交互式 shell 安装依赖项时,出现以下错误:
% docker run -it apache/spark-py:v3.3.1 sh
...
sh-5.1$ python3 -m pip install --upgrade pip setuptools wheel
...
Installing collected packages: wheel, setuptools, pip
ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: '/.local'
Check the permissions.
我尝试附加
--user
并得到相同的结果。我尝试使用 sudo
但图像没有安装它。我可以创建自己的自定义图像,但我试图“按原样”使用官方图像以避免必须构建和发布它,以便我可以在 Gitlab CI 中运行它。我可以这样做,但是为什么我不能只使用发布的图像来安装依赖项来运行我构建的 spark 命令是没有意义的?
好吧,首先我注意到标签的图像层以:
结尾USER 185
而
Dockerfile
中的其他命令在USER 0
之后运行。
所以我跑了:
$ cat /etc/passw
root:x:0:0:root:/root:/bin/bash
...
185:x:185:0:anonymous uid:/opt/spark:/bin/false
查看
docker run
命令的文档,您可以指定用户使用 --user
参数运行特定命令。所以当我启动包含使用:
$ docker run -it --user 0 apache/spark-py:v3.3.1 sh
...
# whoami
root
现在
python3 -m pip install ...
有效。现在我只需要弄清楚如何在 Gitlab 中指定--user
。