首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker在“码头运行<image_id>`”上没有提供“这样的文件或目录”

Docker在“码头运行<image_id>`”上没有提供“这样的文件或目录”
EN

Stack Overflow用户
提问于 2022-03-14 22:56:25
回答 1查看 6.4K关注 0票数 1

所以,我刚刚创建了我的第一个对接映像(woohoo),并能够在原来的主机系统上运行它(Ubuntu20.04桌面PC)。图像是使用docker run -it <image_id>执行的。运行了预期的命令(在CMD中定义了一个bash脚本),并看到了预期的输出。我认为这意味着我成功地创建了我的第一个码头形象,所以我把它推到码头中心。

码头枢纽

Dockerfile

这是Dockerfile:

代码语言:javascript
复制
FROM ubuntu:20.04

# Required for Debian interaction
# (https://stackoverflow.com/questions/62299928/r-installation-in-docker-gets-stuck-in-geographic-area)
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膝上电脑上使用Desktop应用程序和命令行(docker pull mariosyian/benchmarking-programming-languages,后面跟着docker run -it <image_id>)时,会提取相同的映像。这两者都给了我以下错误

代码语言:javascript
复制
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)的容器运行映像,我不仅能够看到文件,而且没有错误地执行它!有人能提出错误发生的原因,以及如何解决吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-14 23:42:28

CMD中为

代码语言:javascript
复制
CMD [ "/home/benchmarking-programming-languages/benchmark.sh -v" ]

这使用了CMD指令,即是一个字符串数组,其中第一个字符串是可执行文件,下面的每个字符串都是该可执行文件的参数。

因为您只有一个指定的字符串,所以docker尝试调用可执行的/home/benchmarking-programming-languages/benchmark.sh -v --即一个名为"benchmark.sh -v“的文件,在其名称中包含一个空格,并以-v结尾。但是,实际上您要做的是使用benchmark.sh参数调用-v脚本。

您可以通过正确地将参数指定为单独的字符串来做到这一点:

代码语言:javascript
复制
CMD ["/home/benchmarking-programming-languages/benchmark.sh", "-v"]

或者使用shell语法

代码语言:javascript
复制
CMD /home/benchmarking-programming-languages/benchmark.sh -v
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71475076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档