当我在windows 10上运行docker映像时。我得到这个错误:

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

我的docker文件是:

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

尝试method1: 试着改变#!/bin/sh到#!/bin/bash但是得到同样的错误。

尝试method2: docker文件中新增dos2unix

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

当前回答

假设在alpine容器中运行go二进制时遇到这个问题。在构建bin之前导出以下变量

# CGO has to be disabled for alpine
export CGO_ENABLED=0

然后去构建

其他回答

我在使用阿尔卑斯山图像时也遇到了同样的问题。

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

#!/bin/bash

Alpine没有bash。所以把这条线改成

#!/bin/sh

或使用

apk add --no-cache bash

帮我解决了这个问题。

更改入口点如下所示。这对我很有效

ENTRYPOINT ["sh","/run.sh"]

正如tuomastik在评论中指出的,文档要求第一个参数是可执行文件:

ENTRYPOINT有两种形式: ENTRYPOINT["可执行","param1", "param2"] (exec表单,首选) ENTRYPOINT命令param1 param2 (shell形式)

我解决了一个类似的问题

我的配置: —> Docker Desktop WSL 2后端—Windows ->需要CGO_ENABLED=1,因为我使用库编译了一个Kafka生产者 confluent-kafka-go.v1 /卡夫卡

我的docker映像已经构建成功,但当我使用docker-compose启动映像时,出现了同样的问题:

xxxxx:~/cp-all-in-one/cp-all-in-one-community# docker-compose up
Recreating ms-c3alert ... done
Attaching to ms-c3alert
ms-c3alert | standard_init_linux.go:211: exec user process caused "no such file or directory"
ms-c3alert exited with code 1

之后,在线程和另一个页面测试所有选项…我发现修复添加在go build句子-ldflags='-w -extldflags "-static"'

RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -ldflags='-w -extldflags "-static"' -a -installsuffix cgo -o c3alert .

我发现了一个特殊的边缘情况,我在一个alpine容器中使用tini init,但由于我没有使用静态链接的版本,并且alpine使用musl libc而不是默认安装的GNU libc库,它崩溃了,并出现了完全相同的错误消息。

如果我明白这一点,并花时间阅读文档,我就会找到Tini Static,它在更改后解决了我的问题。

我解决了这个问题,设置我的设置在vscode。

文件 首选项 设置 文本编辑器 文件 Eol -设置为\n

问候