сборка docker-compose завершается неудачно без такого файла или каталога - PullRequest
1 голос
/ 18 октября 2019

У меня есть следующий 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

Есть идеи, как это исправить?

EDIT

TBH Я новичок в настройке docker-compose и т. Д., Поэтому не совсем уверен в том, как работают различные параметры конфигурации. Если есть какие-либо изменения, которые я мог бы внести в мой docker-compose.yml, который установил бы рабочий каталог для COPY, это было бы лучше

1 Ответ

3 голосов
/ 18 октября 2019

Параметр 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 относятся к контекстному каталогу, поэтомуучитывая файлы, которые вы показываете, это будет соответствовать структуре файловой системы, такой как

docker-compose.yml
my-server/
+-- go.mod
+-- go.sum
+-- dev.Dockerfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...