首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >针对linux的golang docker构建

针对linux的golang docker构建
EN

Stack Overflow用户
提问于 2018-08-17 20:06:29
回答 2查看 324关注 0票数 0

我需要为Linux编译Golang应用程序,但由于另一个库的原因,我不能在Mac下交叉编译。所以我决定在Docker容器中编译。这是我第一次使用Docker。

这是我当前的目录结构:

代码语言:javascript
运行
复制
.
├── Dockerfile
├── Gopkg.lock
├── Gopkg.toml
├── Vagrantfile
├── bootstrap.sh
├── src
│   ├── cmd
│   │   ├── build.bat
│   │   ├── build.sh
│   │   ├── config.json
│   │   ├── readme.md
│   │   └── server.go
│   ├── consumers.go
│   ├── endpoints
│   │   ├── json.go
│   │   ├── rate.go
│   │   ├── test_payment.go
│   │   └── wallet.go
│   ├── middleware
│   │   └── acl.go
│   ├── models.go
│   ├── network
│   │   └── network.go
│   ├── qr
│   │   └── qr.go
│   ├── router
│   │   └── router.go
│   ├── service
│   │   └── walletService.go
│   ├── services.go
│   ├── setup.sql
│   ├── store
│   │   └── wallet.go
│   ├── stores.go
│   └── wallet
│       ├── coin.go
│       └── ethereum.go

Dockerfile:

代码语言:javascript
运行
复制
FROM golang:latest 
WORKDIR /src/cmd
RUN ls
RUN go get github.com/go-sql-driver/mysql
RUN go build -o main ./src/cmd/server.go 
CMD ["./main"]

我尝试使用以下命令构建Docker镜像:

代码语言:javascript
运行
复制
docker build -t outyet .

这是它返回的错误:

代码语言:javascript
运行
复制
Sending build context to Docker daemon  5.505MB
Step 1/6 : FROM golang:latest
 ---> d0e7a411e3da
Step 2/6 : WORKDIR /src/cmd
 ---> Using cache
 ---> 0c4c2b99e294
Step 3/6 : run ls
 ---> Using cache
 ---> 23d3e491a2e1
Step 4/6 : RUN go get github.com/go-sql-driver/mysql
 ---> Running in f34447e51f6c
Removing intermediate container f34447e51f6c
 ---> 5731ab22ee43
Step 5/6 : RUN go build -o main server.go
 ---> Running in ecc48fcf5488
stat server.go: no such file or directory
The command '/bin/sh -c go build -o main server.go' returned a non-zero code: 1

如何使用docker构建我的Golang应用程序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-18 00:32:41

您看到的错误是:

代码语言:javascript
运行
复制
stat server.go: no such file or directory
The command '/bin/sh -c go build -o main server.go' returned a non-zero code: 1

..。换句话说,它告诉你Go编译器找不到你正在尝试构建的server.go。更新Dockerfile,将本地文件复制到Docker镜像中:

代码语言:javascript
运行
复制
FROM golang:latest 
COPY . /go/src/workdir
WORKDIR /go/src/workdir
RUN go build -o main ./src/cmd/server.go 
CMD ["/go/src/workdir/main"]

在您的目录中,我发现了Gopkg.toml,这是dep使用的依赖项清单。dep将使用一个名为vendor的目录来包含Go项目的所有依赖项。在构建Docker镜像之前,您需要确保所有依赖项都存在于dep ensure

代码语言:javascript
运行
复制
$ dep ensure
$ docker build -t outyet .
票数 0
EN

Stack Overflow用户

发布于 2018-08-17 20:10:25

您需要在构建容器中添加源代码。在您的Dockerfile中添加以下行(例如,在FROM golang:latest之后):

代码语言:javascript
运行
复制
ADD src/ /src/cmd

然后,您可以访问容器内的文件(/src/cmd):RUN ls现在应该返回一些内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51895093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档