Использование локальных файлов внутри docker контейнера - PullRequest
0 голосов
/ 28 февраля 2020

Я пишу dockerfile для моего go приложения. Здесь мне нужен файл, который находится в /home/saivamsi/.kube/config на моей локальной машине. Если я непосредственно использую его в коде, он показывает ошибку, что файл или каталог не найден. Итак, я начал использовать тома для этого, но я не знаю, где это пошло не так, я не могу использовать этот файл в своем коде.

FROM golang:1.14.0

ENV HOMEABC=/home/saivamsi

WORKDIR  /go/src/bifrost

VOLUME  src="${HOMEABC}/.kube/config",target="/go/src/bifrost/config"

COPY --chown=bbadmin:bbadmin . /go/src/bifrost

COPY go.mod go.sum ./

RUN go mod download

RUN go build -o main .

#EXPOSE 8001

CMD ["./main"]
# CMD ["tail", "-f", "/dev/null"]

1 Ответ

1 голос
/ 28 февраля 2020

Использование инструкции VOLUME в вашем Dockerfile неверно. Ссылка Dockerfile для VOLUME гласит:

Каталог хоста объявляется во время выполнения контейнера: Каталог хоста (точка монтирования) является его природа, хост-зависимая. Это необходимо для сохранения переносимости образа, поскольку нельзя гарантировать, что данный каталог хостов будет доступен на всех хостах. По этой причине вы не можете смонтировать каталог хоста из Dockerfile. Инструкция VOLUME не поддерживает указание параметра host-dir. Вы должны указать точку монтирования при создании или запуске контейнера.

Чтобы смонтировать каталог $HOME/.kube на хосте в контейнер во время выполнения, вы должны указать --volume или -v в вашей команде docker run.

Например, сначала вы должны удалить инструкцию VOLUME из вашего Dockerfile. Затем вы должны выполнить что-то вроде следующего:

docker run --volume $HOME/.kube:/go/src/bifrost <image name>

Это смонтирует ваш каталог $HOME/.kube на вашем хосте в каталог /go/src/bifrost в работающем контейнере. В этом случае файл конфигурации будет присутствовать в /go/src/bifrost/config во время выполнения.

ПРИМЕЧАНИЕ: Это решение работает, только когда файл конфигурации kube присутствует на хосте, на котором вы запускаете свой контейнер. Чтобы включить файл конфигурации в само изображение, он должен существовать в контексте сборки Docker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...