standard_init_linux.go:190: exec 用户进程导致“没有这样的文件或目录” - Docker

新手上路,请多包涵

当我在 Windows 10 上运行我的 docker 映像时。我收到此错误:

 standard_init_linux.go:190: exec user process caused "no such file or directory"

我的码头文件是:

 FROM openjdk:8

EXPOSE 8080

VOLUME /tmp

ADD appagent.tar.gz /opt/app-agent
ADD services.jar app.jar
ADD run.sh /run.sh

# Install compiler and perl stuff
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y gcc-multilib
RUN apt-get install -y perl

# Install Percona Toolkit
RUN apt-get install --yes percona-toolkit
RUN ["chmod", "+x", "/run.sh"]
ENTRYPOINT ["/run.sh"]

并且脚本以 #!/bin/sh 开头

#!/bin/sh
set -e

JAVA_OPTS="-Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/urandom"

if [ "${APPD_APP_NAME}" != "" ]; then
JAVA_AGENT="-javaagent:/opt/app-agent/javaagent.jar
fi

exec java ${JVM_OPTS} ${JAVA_OPTS} ${JAVA_AGENT} -jar /app.jar

尝试的方法1: 尝试将 #!/bin/sh 更改为 #!/bin/bash 但得到相同的错误。

尝试的方法2:在docker文件中添加了dos2unix

 RUN apt-get install -y dos2unix
RUN dos2unix /run.sh

原文由 gamechanger17 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 840
2 个回答

使用记事本++,进入编辑-> EOL 转换-> 从CRLF 更改为LF。

更新:对于 VScode 用户:您可以通过单击状态栏右下方的 CRLF 将 CRLF 更改为 LF

原文由 Vikas Rathore 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在使用 alpine 图像时遇到了同样的问题。

我的 .sh 文件有以下第一行:

 #!/bin/bash

Alpine 没有 bash。所以将行更改为

#!/bin/sh

或安装 bash

 apk add --no-cache bash

为我解决了这个问题。

原文由 dab0bby 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题