Docker 在 `docker 运行 <image_id>` 上给出 `no such file or directory`
Docker gives `no such file or directory` on `docker run <image_id>`
所以我刚刚创建了我的第一个 docker 图像 (woohoo) 并且能够 运行 它在创建它的原始主机系统上 (Ubuntu 20.04 桌面个人电脑)。该图像是使用 docker run -it <image_id>
执行的。预期的命令(在 CMD
中定义,它只是一个 bash 脚本)是 运行,并且看到了预期的输出。我认为这意味着我成功创建了我的第一张 docker 图片,所以我将其推送到 Docker Hub。
GitHub repo with original docker-compose.yml
and Dockerfile
这是 Docker 文件:
FROM ubuntu:20.04
# Required for Debian interaction
# (
ENV DEBIAN_FRONTEND noninteractive
WORKDIR /home/benchmarking-programming-languages
# Install pre-requisites
# Versions at time of writing:
# gcc -- version (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
# make -- GNU Make 4.2.1
# curl -- 7.68.0
RUN apt update && apt install make build-essential curl wget tar -y
# Install `column`
RUN wget https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.35/util-linux-2.35-rc1.tar.gz
RUN tar xfz util-linux-2.35-rc1.tar.gz
WORKDIR /home/benchmarking-programming-languages/util-linux-2.35-rc1
RUN ./configure
RUN make column
RUN cp .libs/column /bin/
WORKDIR /home/benchmarking-programming-languages
RUN rm -rf util-linux-2.35-rc1*
RUN apt install python3 pip -y
RUN ln -s /usr/bin/python3 /usr/bin/python
RUN apt install default-jdk-headless -y
RUN apt install rustc -y
# Install GoLang
RUN wget https://go.dev/dl/go1.17.8.linux-amd64.tar.gz
RUN rm -rf /usr/local/go && tar -C /usr/local -xzf go1.17.8.linux-amd64.tar.gz
ENV PATH="/usr/local/go/bin:${PATH}"
# Install Haxe and Haxelib
RUN wget https://github.com/HaxeFoundation/haxe/releases/download/4.2.5/haxe-4.2.5-linux64.tar.gz
RUN tar xfz haxe-4.2.5-linux64.tar.gz
RUN ln -s /home/benchmarking-programming-languages/haxe_20220306074705_e5eec31/haxe /usr/bin/haxe
RUN ln -s /home/benchmarking-programming-languages/haxe_20220306074705_e5eec31/haxelib /usr/bin/haxelib
# # Install Neko (Haxe VM)
# RUN add-apt-repository ppa:haxe/snapshots -y
# RUN apt update
# RUN apt install neko -y
RUN if ! test -d /home/benchmarking-programming-languages; then mkdir /home/benchmarking-programming-languages && echo "Created directory /home/benchmarking-programming-languages."; fi
COPY . /home/benchmarking-programming-languages
RUN pip install -r /home/benchmarking-programming-languages/requirements_dev.txt
CMD [ "/home/benchmarking-programming-languages/benchmark.sh -v" ]
然而,在我的 Windows 10 机器(与上面相同的机器只是双启动)和一台 Windows 11 笔记本电脑上使用 Docker 桌面应用程序和命令行(docker pull mariosyian/benchmarking-programming-languages
后跟 docker run -it <image_id>
)。两者都给我以下错误
Error invoking remote method 'docker-run-container': Error: (HTTP code 400) unexpected - failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "/home/benchmarking-programming-languages/benchmark.sh -v": stat /home/benchmarking-programming-languages/benchmark.sh -v: no such file or directory: unknown
尽管如此,运行将图像作为带有 shell (docker run -it <image_id> sh
) 的容器,我能够成功地不仅看到文件,而且执行它没有错误!有人可以提出错误首先发生的原因,以及如何解决吗?
在your Dockerfile
you have specified the CMD
中为
CMD [ "/home/benchmarking-programming-languages/benchmark.sh -v" ]
这使用 JSON syntax of the CMD
指令,即是一个字符串数组,其中第一个字符串是可执行文件,后面的每个字符串都是该可执行文件的参数。
由于您只指定了一个字符串 docker
尝试调用可执行文件 /home/benchmarking-programming-languages/benchmark.sh -v
- 即名为“benchmark.sh -v
”的 文件 ,名称中包含 space 并以 -v
结尾。但是您实际打算做的是使用 -v
参数 .
调用 benchmark.sh
脚本
您可以通过将参数正确指定为单独的字符串来做到这一点:
CMD ["/home/benchmarking-programming-languages/benchmark.sh", "-v"]
或使用 shell syntax:
CMD /home/benchmarking-programming-languages/benchmark.sh -v
所以我刚刚创建了我的第一个 docker 图像 (woohoo) 并且能够 运行 它在创建它的原始主机系统上 (Ubuntu 20.04 桌面个人电脑)。该图像是使用 docker run -it <image_id>
执行的。预期的命令(在 CMD
中定义,它只是一个 bash 脚本)是 运行,并且看到了预期的输出。我认为这意味着我成功创建了我的第一张 docker 图片,所以我将其推送到 Docker Hub。
GitHub repo with original docker-compose.yml
and Dockerfile
这是 Docker 文件:
FROM ubuntu:20.04
# Required for Debian interaction
# (
ENV DEBIAN_FRONTEND noninteractive
WORKDIR /home/benchmarking-programming-languages
# Install pre-requisites
# Versions at time of writing:
# gcc -- version (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
# make -- GNU Make 4.2.1
# curl -- 7.68.0
RUN apt update && apt install make build-essential curl wget tar -y
# Install `column`
RUN wget https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.35/util-linux-2.35-rc1.tar.gz
RUN tar xfz util-linux-2.35-rc1.tar.gz
WORKDIR /home/benchmarking-programming-languages/util-linux-2.35-rc1
RUN ./configure
RUN make column
RUN cp .libs/column /bin/
WORKDIR /home/benchmarking-programming-languages
RUN rm -rf util-linux-2.35-rc1*
RUN apt install python3 pip -y
RUN ln -s /usr/bin/python3 /usr/bin/python
RUN apt install default-jdk-headless -y
RUN apt install rustc -y
# Install GoLang
RUN wget https://go.dev/dl/go1.17.8.linux-amd64.tar.gz
RUN rm -rf /usr/local/go && tar -C /usr/local -xzf go1.17.8.linux-amd64.tar.gz
ENV PATH="/usr/local/go/bin:${PATH}"
# Install Haxe and Haxelib
RUN wget https://github.com/HaxeFoundation/haxe/releases/download/4.2.5/haxe-4.2.5-linux64.tar.gz
RUN tar xfz haxe-4.2.5-linux64.tar.gz
RUN ln -s /home/benchmarking-programming-languages/haxe_20220306074705_e5eec31/haxe /usr/bin/haxe
RUN ln -s /home/benchmarking-programming-languages/haxe_20220306074705_e5eec31/haxelib /usr/bin/haxelib
# # Install Neko (Haxe VM)
# RUN add-apt-repository ppa:haxe/snapshots -y
# RUN apt update
# RUN apt install neko -y
RUN if ! test -d /home/benchmarking-programming-languages; then mkdir /home/benchmarking-programming-languages && echo "Created directory /home/benchmarking-programming-languages."; fi
COPY . /home/benchmarking-programming-languages
RUN pip install -r /home/benchmarking-programming-languages/requirements_dev.txt
CMD [ "/home/benchmarking-programming-languages/benchmark.sh -v" ]
然而,在我的 Windows 10 机器(与上面相同的机器只是双启动)和一台 Windows 11 笔记本电脑上使用 Docker 桌面应用程序和命令行(docker pull mariosyian/benchmarking-programming-languages
后跟 docker run -it <image_id>
)。两者都给我以下错误
Error invoking remote method 'docker-run-container': Error: (HTTP code 400) unexpected - failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "/home/benchmarking-programming-languages/benchmark.sh -v": stat /home/benchmarking-programming-languages/benchmark.sh -v: no such file or directory: unknown
尽管如此,运行将图像作为带有 shell (docker run -it <image_id> sh
) 的容器,我能够成功地不仅看到文件,而且执行它没有错误!有人可以提出错误首先发生的原因,以及如何解决吗?
在your Dockerfile
you have specified the CMD
中为
CMD [ "/home/benchmarking-programming-languages/benchmark.sh -v" ]
这使用 JSON syntax of the CMD
指令,即是一个字符串数组,其中第一个字符串是可执行文件,后面的每个字符串都是该可执行文件的参数。
由于您只指定了一个字符串 docker
尝试调用可执行文件 /home/benchmarking-programming-languages/benchmark.sh -v
- 即名为“benchmark.sh -v
”的 文件 ,名称中包含 space 并以 -v
结尾。但是您实际打算做的是使用 -v
参数 .
benchmark.sh
脚本
您可以通过将参数正确指定为单独的字符串来做到这一点:
CMD ["/home/benchmarking-programming-languages/benchmark.sh", "-v"]
或使用 shell syntax:
CMD /home/benchmarking-programming-languages/benchmark.sh -v