启动 docker 图像时出现错误 standard_init_linux.go:178
Error standard_init_linux.go:178 while starting the docker image
我使用以下 Docker 文件和 Drone 构建服务器构建了 docker 图像。
FROM centurylink/ca-certs
WORKDIR /app
ADD VERSION .
ADD conf/ conf/
ADD resources/ resources/
ADD app app
# Expose the application on port 8080
EXPOSE 80
ENTRYPOINT ["./app"]
然而它导致异常standard_init_linux.go:178: exec user process caused "no such file or directory"
Docker 主机是 MacOS。我正在尝试在 Amazon EC2 linux 实例中执行此图像。
以下是无人机构建脚本。 (.drone.yml
)
workspace:
base: /go
path: src/github.com/me/app
pipeline:
build:
image: instrumentisto/glide
commands:
- glide install
- export GOOS=linux
- export GOARCH=amd64
- go build
- go test -v
when:
event: [ push, tag ]
publish:
image: plugins/ecr
repo: 111.dkr.ecr.eu-central-1.amazonaws.com/app
registry: 111.dkr.ecr.eu-central-1.amazonaws.com
dockerfile: Dockerfile
tag: ${DRONE_TAG}
default_tags: false
default_branch: development
secrets: [ ecr_access_key, ecr_secret_key, ecr_region ]
when:
event: tag
status: success
ref: refs/tags/v1*
我在 SO 中遇到过类似的问题,他们建议在脚本中添加一个 shebang 行。但是在我的例子中,入口点不是脚本而是 golang 可执行文件。
您需要确保您的 go 应用程序被编译为静态链接。如果它查找 libc,则它不会存在于您选择的容器中。使用 go 网络调用和 cgo,您通常会获得指向创建的 libc 等内容的动态链接。解决这些问题的方法是 CGO_ENABLED=0
和 -tags netgo
。
我使用以下 Docker 文件和 Drone 构建服务器构建了 docker 图像。
FROM centurylink/ca-certs
WORKDIR /app
ADD VERSION .
ADD conf/ conf/
ADD resources/ resources/
ADD app app
# Expose the application on port 8080
EXPOSE 80
ENTRYPOINT ["./app"]
然而它导致异常standard_init_linux.go:178: exec user process caused "no such file or directory"
Docker 主机是 MacOS。我正在尝试在 Amazon EC2 linux 实例中执行此图像。
以下是无人机构建脚本。 (.drone.yml
)
workspace:
base: /go
path: src/github.com/me/app
pipeline:
build:
image: instrumentisto/glide
commands:
- glide install
- export GOOS=linux
- export GOARCH=amd64
- go build
- go test -v
when:
event: [ push, tag ]
publish:
image: plugins/ecr
repo: 111.dkr.ecr.eu-central-1.amazonaws.com/app
registry: 111.dkr.ecr.eu-central-1.amazonaws.com
dockerfile: Dockerfile
tag: ${DRONE_TAG}
default_tags: false
default_branch: development
secrets: [ ecr_access_key, ecr_secret_key, ecr_region ]
when:
event: tag
status: success
ref: refs/tags/v1*
我在 SO 中遇到过类似的问题,他们建议在脚本中添加一个 shebang 行。但是在我的例子中,入口点不是脚本而是 golang 可执行文件。
您需要确保您的 go 应用程序被编译为静态链接。如果它查找 libc,则它不会存在于您选择的容器中。使用 go 网络调用和 cgo,您通常会获得指向创建的 libc 等内容的动态链接。解决这些问题的方法是 CGO_ENABLED=0
和 -tags netgo
。