代码之家  ›  专栏  ›  技术社区  ›  eignhpants

将无人机8.5构建到容器中失败,“没有这样的文件或目录”

  •  0
  • eignhpants  · 技术社区  · 7 年前

    我有一个自动建造系统,我拿了无人机。io 8.5文档,并将它们放入一个脚本中,该脚本输出golang构建的二进制文件。

    然后,我使用drone(ha)构建最终用于生产的Docker文件。

    我试图升级无人机,使用无人机制造新的无人机容器,但它们都有相同的错误:

    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"
    

    无人机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"]
    

    0 回复  |  直到 7 年前
        1
  •  0
  •   Oliver Gur Kamal Singh Badal    7 年前

    构建的问题在于,您没有构建可以在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 举个例子。

    推荐文章