docker-compose构建失败,没有此类文件或目录

时间:2019-10-18 10:34:01

标签: docker docker-compose

我有以下docker-compose.yml

version: '3.7'
services:
  auth_api:
    build:
      dockerfile: my-server/dev.Dockerfile
      context: .
    ports:
      - '9000:3000'
    volumes:
      - ./my-server:/app/

以及以下my-server/dev.Dockerfile

FROM golang:1.13.3

WORKDIR /app

RUN ls
# Copy go mod and sum files
COPY ./go.mod ./go.sum ./


# Download all dependencies. Dependencies will be cached if the go.mod and go.sum files are not changed
RUN go mod download

# Copy the source from the current directory to the Working Directory inside the container
COPY . .

# Build the Go app
RUN go build -o main .

# Expose port 8080 to the outside world
EXPOSE 3000

# Command to run the executable
CMD ["./main"]

现在,当我跑步

docker build my-server/ --file=my-server/dev.Dockerfile

docker容器构建成功。

但是,当我运行docker-compose build时, 输出失败:

Building auth_api
Step 1/9 : FROM golang:1.13.3
 ---> dc7582e06f8e
Step 2/9 : WORKDIR /app
 ---> Using cache
 ---> c4005150884a
Step 3/9 : RUN ls
 ---> Using cache
 ---> 59051268c382
Step 4/9 : COPY ./go.mod ./go.sum ./
ERROR: Service 'auth_api' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder881802488/go.mod: no such file or directory

有什么想法要解决吗?

编辑

TBH我是刚建立docker-compose等的新手,所以不太确定不同的配置选项如何工作。如果我可以对docker-compose.yml进行任何更改,将其设置为COPY的工作目录,那将是最好的

1 个答案:

答案 0 :(得分:3)

var names = document.getElementsByClassName("name"); for(var i = 0; i < names.length; i++) { names[i].value } 中的context:选项将路径选项与docker-compose.yml匹配,除了docker build如果它与构建上下文目录匹配,似乎会删除文件前缀。如果您是手动运行

docker build

然后您需要更改docker build my-server/ --file=my-server/dev.Dockerfile # ^^^ ^^^ # context dockerfile 以匹配

docker-compose.yml

build: dockerfile: dev.Dockerfile context: my-server 中的所有路径都是相对于上下文目录的,因此给定您显示的文件,这将对应于这样的文件系统结构

Dockerfile