&引用;“禁止在…中使用文件”;使用go with docker compose时出错
我在Ubuntu 16.04上安装了Go。这是我的GOPATH=/home/{username}/work 我在/home/{username}/work/src中创建了一个项目 这是我的项目文件夹层次结构&引用;“禁止在…中使用文件”;使用go with docker compose时出错,docker,go,docker-compose,Docker,Go,Docker Compose,我在Ubuntu 16.04上安装了Go。这是我的GOPATH=/home/{username}/work 我在/home/{username}/work/src中创建了一个项目 这是我的项目文件夹层次结构 project-name services configuration api main.go Dockerfile bff api
project-name
services
configuration
api
main.go
Dockerfile
bff
api
main.go
Dockerfile
docker-compose.yml
favicon.ico
README.md
我可以用docker文件构建和运行,但不能用docker compose构建和运行
我找不到任何解决办法
配置服务dockerfile:
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"]
它与dockerfile一起工作
这是我的docker撰写文件:
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
它不起作用
当“run go get”命令运行时,它会给出一个错误,错误是:
can't load package: package project-name/services/configuration/api: no Go files in /go/src/project-name/services/configuration/api
ERROR: Service 'configuration' failed to build: The command '/bin/sh -c go get' returned a non-zero code: 1
在你的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 .
当前目录是什么目录很重要。您的
lenitivo服务器/services/configuration/api
目录的内容是什么?@Flimzy只有一个文件是main.go如果您发出命令docker make./services/configuration/Dockerfile
,我理解,当我用“context:services/configuration”成功了!你也是对的。我运行了“cd$GOPATH/src/project name/services/configuration docker build”。谢谢你的帮助。