我在Ubuntu 16.04上安装了Go。这是我的GOPATH = / home / {username} / work。
我在/ home / {username} / work / src中创建了一个项目。
这是我的项目文件夹层次结构。
T
我可以使用dockerfile构建和运行,但不能使用docker-compose构建和运行。
我找不到任何解决方案。
配置服务dockerfile:
project-name
services
configuration
api
main.go
Dockerfile
bff
api
main.go
Dockerfile
docker-compose.yml
favicon.ico
README.md
它与dockerfile一起使用。
这是我的docker-compose文件:
FROM golang:1.11.1-alpine3.8 as builder
RUN apk update && apk add git && go get gopkg.in/natefinch/lumberjack.v2
RUN mkdir -p /go/src/project-name/services/configuration
RUN CGO_ENABLED=0
RUN GOOS=linux
ADD . /go/src/project-name/services/configuration
ENV GOPATH /go
WORKDIR /go/src/project-name/services/configuration/api
RUN go get
RUN go build
FROM alpine
RUN apk update
RUN apk add curl
RUN mkdir -p /app
COPY --from=builder /go/src/project-name/services/configuration/api/ /app/
RUN chmod +x /app/api
WORKDIR /app
EXPOSE 5001
ENTRYPOINT ["/app/api"]
没有用。
“ run go get”命令运行时,出现错误,错误是:
version: '3.4'
services:
bff:
image: project-name/bff:${TAG:-latest}
build:
context: .
dockerfile: services/bff/Dockerfile
ports:
- "5000:5000"
container_name: bff
depends_on:
- configuration
configuration:
image: project-name/configuration:${TAG:-latest}
build:
context: .
dockerfile: services/configuration/Dockerfile
ports:
- "5001:5001"
container_name: configuration
答案 0 :(得分:4)
在您的Dockerfile中,您说
ADD . /go/src/project-name/services/configuration
,它希望主机上的构建上下文目录包含源文件。但是您的docker-compose.yml
文件说
build:
context: .
dockerfile: services/configuration/Dockerfile
其中上下文目录是源代码管理树的根目录,而不是您要构建的特定Go源目录。如果您将其更改为
build:
context: services/configuration
# Default value of "dockerfile: Dockerfile" will be right
它可能会更好地工作。
在普通的Docker命令中,您当前的docker-compose.yml
文件说的等效于
cd $GOPATH/src/project-name
docker build -f services/configuration/Dockerfile .
但是您可能实际上正在运行
cd $GOPATH/src/project-name/services/configuration
docker build .
以及当前目录是什么目录。