Как прокинуть файл конфигураций в контейнер

Рейтинг: 0Ответов: 1Опубликовано: 10.03.2023

Собираю свое приложение на GO, но почему-то не прокидывается файл конфигураций

FROM golang:latest

WORKDIR app

COPY task-manager .

RUN go mod download

RUN go build TaskManager/cmd/main

VOLUME /root/envs_dev/.env /go/app/.env

CMD ["./main"]

файл на месте, сам переносил его туда и проверял

root@test-asup-dev-devops:~/envs_dev# ls -lha
total 12K
drwxr-xr-x 2 root root 4.0K Mar  9 14:35 .
drwx------ 7 root root 4.0K Mar  9 15:15 ..
-rw-r--r-- 1 root root  378 Mar  9 14:35 .env

Контейнер выдает след логи:

panic: config file parsing error: read /go/app/.env: is a directory

goroutine 1 [running]:
TaskManager/pkg/configuration.init.0()
    /go/app/pkg/configuration/configuration.go:41 +0x92

Ответы

▲ 1Принят

В документации по Dockerfile

The VOLUME instruction creates a mount point with the specified name and marks it as holding externally mounted volumes from native host or other containers

Неправильное использование инструкции

VOLUME /root/envs_dev/.env /go/app/.env

Данная инструкция ничего не монтирует, а лишь создает точку монтирования (каталог) и помечает ее, что будем грузить туда данные из вне.

В вашем случае создались два каталога, но это не то, что нам нужно.

Из Dockerfile инструкцию VOLUME нужно убрать.

Монтировать файл .env нужно при запуске контейнера или через docker-compose как это описано в статье.