gpt4 book ai didi

docker - Docker : standard_init_linux. 内的 Pip 和 Powershell go:228: exec 用户进程导致:exec 格式错误

转载 作者:行者123 更新时间:2023-12-04 18:38:36 25 4
gpt4 key购买 nike

尝试使用 Powershell 和 pip 构建图像,然后运行调用内部 python 包的 Powershell 脚本:

> docker build --file gallery-dl.dockerfile --tag psu .
[+] Building 0.6s (9/9) FINISHED
=> [internal] load build definition from gallery-dl.dockerfile 0.0s
=> => transferring dockerfile: 413B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for mcr.microsoft.com/powershell:7.3.0-preview.3-ubunt 0.2s
=> [internal] load build context 0.0s
=> => transferring context: 36B 0.0s
=> [1/4] FROM mcr.microsoft.com/powershell:7.3.0-preview.3-ubuntu-focal-20220318@s 0.0s
=> CACHED [2/4] RUN apt-get update && apt-get -qq -y install curl ca-certifica 0.0s
=> CACHED [3/4] RUN pip3 install https://github.com/mikf/gallery-dl/archive/master 0.0s
=> [4/4] COPY gallery-dl.ps1 /mydir/ 0.1s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:6bd7be9979190bf2993e5473265284883b0c154c1e62f5bb27d74c0 0.0s
=> => naming to docker.io/library/psu 0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
但得到以下错误:
> docker run -it --rm --name psutest psu
standard_init_linux.go:228: exec user process caused: exec format error
我的 Dockerfile:
FROM mcr.microsoft.com/powershell:7.3.0-preview.3-ubuntu-focal-20220318
RUN apt-get update && \
apt-get -qq -y install curl ca-certificates python3-pip
RUN pip3 install https://github.com/mikf/gallery-dl/archive/master.zip https://github.com/yt-dlp/yt-dlp/archive/master.zip
COPY gallery-dl.ps1 /mydir/
ENTRYPOINT ["/mydir/gallery-dl.ps1"]

我究竟做错了什么?
该脚本直接在我的计算机上运行时运行良好。

最佳答案

您在 Linux 镜像中运行它(基于 Ubuntu 20.04 “Focal Fossa”),其中默认 shell 通常是 Bourne shell 的某种风格。您需要以某种方式告诉 Linux 它需要使用 Powershell 来运行脚本。
最好的方法是在脚本开头加上“shebang”行。这看起来大致像

#!/usr/bin/pwsh -File
每当脚本被标记为可执行( chmod +x gallery-dl.ps1 )时,Linux(和任何其他 Unix)都会找到 shebang 行并运行该命令,并将脚本名称和任何其他参数传递给它。这必须从文件的绝对第一个字节开始——在它之前没有注释或换行符或其他任何东西——这是一个 DOS 行结尾会导致问题的地方。由于此行也是 Powershell 注释,因此它在运行时不会对脚本产生影响。
您还可以将解释器放在 Docker 镜像的命令中。这在某种程度上是在重复你自己,如果你有时需要运行一个备用脚本作为主容器进程,你将不得不重复 pwsh每个备用脚本的解释器。
# instead of the ENTRYPOINT line you currently have
CMD ["/usr/bin/pwsh", "-File", "/mydir/gallery-dl.ps1"]

关于docker - Docker : standard_init_linux. 内的 Pip 和 Powershell go:228: exec 用户进程导致:exec 格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71907799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com