Как разрешить dockerfile и docker-compose, когда основные файлы go находятся во вложенном каталоге?

# #docker #go #docker-compose #dockerfile

Вопрос:

Я очень новичок в Docker, поэтому, пожалуйста, простите меня, но у меня есть рабочий файл dockerfile и docker-compose, когда Main.go находится на корневом уровне, но в этом проекте приложение сломается, если я помещу main.go в корневой каталог.

Структура файла

 queue-backend
- .idea
- cmd
  - appCode
    - handler.go
    - helper.go
    - main.go
    - routes.go
- pkg
  - forms
  - models
    - mongodb
    - models.go
- tmp
.gitignore
docker-compose.yml
Dockerfile
go.mod
README.md
db
extensions
 

В любом случае… мой док-файл выглядит так

 FROM golang:1.16

WORKDIR /app
COPY go.mod .
COPY go.sum .
RUN go mod download

COPY ../.. .
RUN curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

CMD ["air"]
 

Docker-compose.yml выглядит так

 version: '3.9'
services:
  backend:
    build: ""
    ports:
      - 8000:8000
    volumes:
      - .:/app
    depends_on:
      - mongodb_container
  mongodb_container:
    image: mongo:latest
    environment:
      MONGO_INITDB_ROOT_USERNAME: queue-delivery
      MONGO_INITDB_ROOT_PASSWORD: password
    ports:
      - 27017:27017
    volumes:
      - mongodb_data_container:/data/db

volumes:
  mongodb_data_container:
 

Я попытался установить WORKDIR в /app/cmd/appCode или /cmd/appCode и сопоставить то же самое в docker-compose .:/app/cmd/appCode , и .:/cmd/appCode ни один из них не работает, он всегда возвращает это или указанные выше пути вместо простого пути «/app» .

 backend_1            | no Go files in /app
backend_1            | failed to build, error: exit status 1
 

На данный момент я не уверен, что еще можно попробовать…

Комментарии:

1. Вам нужен живой инструмент для перезагрузки здесь? Можете ли вы COPY . . , RUN go install ./cmd/appCode , и снять volumes: крепление? Похоже, вы тоже можете настроить air перестройку образа докера .

Ответ №1:

Чтобы разрешить файл Dockerfile в docker-составьте.yml вам нужно изменить раздел сборки, как показано ниже

 version: '3.9'
services:
    backend:
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - 8000:8000
        volumes:
            - .:/app
        depends_on:
            - mongodb_container

    mongodb_container:
        image: mongo:latest
        environment:
            MONGO_INITDB_ROOT_USERNAME: queue-delivery
            MONGO_INITDB_ROOT_PASSWORD: password
        ports:
            - 27017:27017
        volumes:
            - mongodb_data_container:/data/db

volumes:
    mongodb_data_container:
 

В вашем файле Dockerfile есть некоторые проблемы,

 FROM golang:1.16

WORKDIR /app
# File changes must be added at the very end, to avoid the installation of dependencies again and again
RUN curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
COPY go.mod .
COPY go.sum .  # can not find this file in the directory structure
RUN go mod download

COPY ../.. .  # doesn't make sense, just use COPY . .

CMD ["air"]
 

Комментарии:

1. Поэтому я получаю backend_1 | can't load package: package .: no Go files in /app backend_1 | failed to build, error: exit status 1 сообщение, когда запускаю «docker-составить-построить», нужно ли мне что-то менять. в РАБОЧЕМ КАБИНЕТЕ?

2. Исправлен рабочий каталог, игнорирование, спасибо за ваш ответ! :~)