我需要为Linux编译Golang应用程序,但由于另一个库的原因,我不能在Mac下交叉编译。所以我决定在Docker容器中编译。这是我第一次使用Docker。
这是我当前的目录结构:
.
├── 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:
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镜像:
docker build -t outyet .
这是它返回的错误:
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应用程序?
发布于 2018-08-18 00:32:41
您看到的错误是:
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镜像中:
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
中
$ dep ensure
$ docker build -t outyet .
发布于 2018-08-17 20:10:25
您需要在构建容器中添加源代码。在您的Dockerfile
中添加以下行(例如,在FROM golang:latest
之后):
ADD src/ /src/cmd
然后,您可以访问容器内的文件(/src/cmd
):RUN ls
现在应该返回一些内容。
https://stackoverflow.com/questions/51895093
复制相似问题