# #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. Исправлен рабочий каталог, игнорирование, спасибо за ваш ответ! :~)