Pip 和 Powershell inside Docker: standard_init_linux.go:228: exec user process caused: exec format error
Pip and Powershell inside Docker: standard_init_linux.go:228: exec user process caused: exec format error
尝试使用 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"]
我做错了什么?
当直接在我的计算机上 运行 时,脚本 运行 很好。
这里有多个答案,但大多数都指的是 x64 架构。请找到link:
你 运行 将其放在 Linux 图像中(基于 Ubuntu 20.04“Focal Fossa”),其中默认 shell 通常是一些谍影重重 shell 的味道。您需要以某种方式告诉 Linux 它需要使用 Powershell 来 运行 脚本。
执行此操作的最佳方法是以“shebang”行开始脚本。这看起来大致像
#!/usr/bin/pwsh -File
每当脚本被标记为可执行(chmod +x gallery-dl.ps1
)时,Linux(和任何其他 Unix)将找到 shebang 行和 运行 该命令,传递脚本名称和任何它的附加参数。这必须从文件的绝对第一个字节开始——在它之前没有注释或换行符或任何其他内容——这是 DOS 行结尾会导致问题的地方。由于这一行也是一个 Powershell 注释,它在 运行s.
时对脚本没有影响
您也可以将解释器放在 Docker 图像的命令中。这在某种程度上是在重复你自己,如果你有时需要 运行 一个备用脚本作为主容器进程,你将不得不为每个备用脚本重复 pwsh
解释器。
# instead of the ENTRYPOINT line you currently have
CMD ["/usr/bin/pwsh", "-File", "/mydir/gallery-dl.ps1"]
尝试使用 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"]
我做错了什么? 当直接在我的计算机上 运行 时,脚本 运行 很好。
这里有多个答案,但大多数都指的是 x64 架构。请找到link:
你 运行 将其放在 Linux 图像中(基于 Ubuntu 20.04“Focal Fossa”),其中默认 shell 通常是一些谍影重重 shell 的味道。您需要以某种方式告诉 Linux 它需要使用 Powershell 来 运行 脚本。
执行此操作的最佳方法是以“shebang”行开始脚本。这看起来大致像
#!/usr/bin/pwsh -File
每当脚本被标记为可执行(chmod +x gallery-dl.ps1
)时,Linux(和任何其他 Unix)将找到 shebang 行和 运行 该命令,传递脚本名称和任何它的附加参数。这必须从文件的绝对第一个字节开始——在它之前没有注释或换行符或任何其他内容——这是 DOS 行结尾会导致问题的地方。由于这一行也是一个 Powershell 注释,它在 运行s.
您也可以将解释器放在 Docker 图像的命令中。这在某种程度上是在重复你自己,如果你有时需要 运行 一个备用脚本作为主容器进程,你将不得不为每个备用脚本重复 pwsh
解释器。
# instead of the ENTRYPOINT line you currently have
CMD ["/usr/bin/pwsh", "-File", "/mydir/gallery-dl.ps1"]