在 $PATH 中找不到可执行文件:未知

gar*_*ent 5 docker dockerfile

试图找出为什么我的 dockerfile:

FROM mcr.microsoft.com/powershell:ubuntu-focal
RUN apt-get -qq -y update && \
    apt-get -qq -y upgrade && \
    apt-get -qq -y install curl ca-certificates python3-pip exiftool mkvtoolnix
RUN pip3 install gallery-dl yt-dlp
WORKDIR /mydir
COPY gallery-dl.ps1 .
ENTRYPOINT ["gallery-dl.ps1"]
Run Code Online (Sandbox Code Playgroud)

运行时抛出以下错误:

> docker build --file gallery-dl.dockerfile --tag psa .
> docker run -it --rm --name psatest psa
docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "gallery-dl.ps1": executable file not found in $PATH: unknown.
Run Code Online (Sandbox Code Playgroud)

我似乎已经尝试了一切:使用 CMD 而不是 ENTRYPOINT、修改 COPY dest to ./gallery-dl.ps1、更改命令的顺序。我已添加#!/usr/bin/pwsh -File到 ps1 脚本(按照我的另一个问题中的指示)。当我附加到容器中并 ls 时,它会显示我的所有安装座及其gallery-dl.ps本身应在的位置以及我应该调用它的位置:

PS /mydir> ls
conf  gallery-dl.ps1  output
Run Code Online (Sandbox Code Playgroud)

唯一有效的方法是删除 WORKDIR 但我实际上需要它,我不能只在 root 中运行所有内容。

Han*_*ian 7

两件事:确保文件被标记为可执行文件。由于不在您的路径中,因此您需要通过在名称前面/mydir添加来告诉 Docker 在当前目录中查找脚本。./

FROM mcr.microsoft.com/powershell:ubuntu-focal
RUN apt-get -qq -y update && \
    apt-get -qq -y upgrade && \
    apt-get -qq -y install curl ca-certificates python3-pip exiftool mkvtoolnix
RUN pip3 install gallery-dl yt-dlp
WORKDIR /mydir
COPY gallery-dl.ps1 .
RUN chmod +x gallery-dl.ps1
ENTRYPOINT ["./gallery-dl.ps1"]
Run Code Online (Sandbox Code Playgroud)

  • 是的,Linux 只在 PATH 目录中查找可执行文件,与 Windows 不同,Windows 也在当前目录中查找。 (2认同)