docker - 使用 “no such file or directory”将无人机8.5构建到容器中失败

标签 docker drone drone.io

我有一个自动化的构建系统,我使用了drone.io 8.5文档进行构建,并将其放在一个脚本中,该脚本输出golang构建的二进制文件。

然后,我使用无人机(ha)构建最终在生产中使用的停放文件。

我正在尝试通过使用无人机来构建新的无人机容器来升级无人机,但是它们都会出现相同的错误:

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

在我看来,一切都在正确的地方。

我的构建脚本提取我想要的SHA并执行构建步骤:
#! /bin/bash

set -e
set -u

PKG=github.com/drone/drone
REPO=https://${PKG}.git
SHA=81103a98208b0bfc76be5b07194f359fbc80183b
PATH=$GOPATH/bin:$PATH

cd $GOPATH
git clone $REPO src/${PKG}
cd src/${PKG}
git checkout -qf $SHA

# setup drone
go get -u github.com/drone/drone-ui/dist
go get -u golang.org/x/net/context
go get -u golang.org/x/net/context/ctxhttp
go get -u github.com/golang/protobuf/proto
go get -u github.com/golang/protobuf/protoc-gen-go

go install github.com/drone/drone/cmd/drone-agent
go install github.com/drone/drone/cmd/drone-server

mkdir release
cp $GOPATH/bin/drone-server release/drone-server

echo "Complete"

drone docker插件基于该版本的官方Dockerfile(版本8.5,如下所示)构建我的容器:
docker:
  image: plugins/docker
  repo: myprivatereg.com/org/docker-drone
  dockerfile: /drone/src/github.com/drone/drone/Dockerfile
  context: /drone/src/github.com/drone/drone
  tags:
    - ${DRONE_BRANCH}-latest
    - ${DRONE_COMMIT}

在这种情况下,Dockerfile为:
# docker build --rm -t drone/drone .

FROM drone/ca-certs
EXPOSE 8000 9000 80 443

ENV DATABASE_DRIVER=sqlite3
ENV DATABASE_CONFIG=/var/lib/drone/drone.sqlite
ENV GODEBUG=netdns=go
ENV XDG_CACHE_HOME /var/lib/drone

ADD release/drone-server /bin/

ENTRYPOINT ["/bin/drone-server"]

我一生都无法看到这个问题,就像二进制文件在正确的位置一样。唯一的问题是构建环境,但是我以相同的结果手动破坏了这些步骤。

最佳答案

构建的问题是您没有构建可以在docker容器内执行的二进制文件,因此exec user process错误。

解决此问题的快速方法是将交叉编译标志添加到go install中。这也将导致二进制文件放置在稍微不同的位置,因此您的构建文件将如下所示:

GOOS=linux GOARCH=386 go install github.com/drone/drone/cmd/drone-agent
GOOS=linux GOARCH=386 go install github.com/drone/drone/cmd/drone-server

mkdir release
cp $GOPATH/bin/linux_386/drone-server release/drone-server

解决此问题的正确方法(更复杂)是先使用具有构建步骤的多阶段Dockerfile,例如参见this blog post为例。

关于docker - 使用 “no such file or directory”将无人机8.5构建到容器中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54915141/

相关文章:

docker - Drone - 使用 Drone.yml 自定义日期时间字符串格式命名 docker 图像标签

Docker、docker-compose 和在项目之间复制文件

github - 使用随机主机端口启动 Docker 容器并返回该端口以在其他地方使用它

docker - 如何在设置中启动Docker容器?

drone - 使用 "Drone Conditions"运行构建存储库的一部分

docker - DRONE_ADMIN 用户的默认管理员密码是什么?

docker - 如何有条件地在 docker-compose.yml 中运行不同的配置?

docker - 使用 docker & go cli 将文件从我的本地机器上传到 Api 服务器

amazon-web-services - 在AWS托管的集群(不是EKS)上的Kubernetes:基础架构复制逻辑在哪里?

docker - 无人机 CI secret 未填充