Я пытаюсь dockerize мой первый Go
проект (хотя вопрос не имеет никакого отношения к Go, я думаю!).
Краткое резюме (о том, что делает код) - он просто проверяет наличие папки .cache
и создает ее, если она не существует.
После докеризации проекта моя цель - смонтировать путь в контейнере, в котором .cache
создан, к пути к хосту
Вот мой Dockerfile (Multistaged):
FROM golang as builder
ENV GO111MODULE=on
WORKDIR /proj
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
RUN ls
FROM alpine
COPY --from=builder /proj/project /proj/
RUN chmod a+x /proj/project
ENTRYPOINT [ "/proj/project" ]
РЕДАКТИРОВАТЬ: Если я запускаю что-то вроде этого (как упоминал @Jan Garaj в комментариях):
docker run --rm -v "`pwd`/data/.cache:/proj/.cache/" project-image:latest
не выдает ошибку, но создаетпустая папка data/.cache
на хосте без актуальных (контентных) файлов и папок из каталога .cache
контейнера.Хотя исполняемый файл внутри контейнера может создавать каталог .cache
и его последующие файлы и папки.
Я знаю, варианты этой проблемы задавались много раз, но поверьте мне, я опробовал все эти решения. Ниже приведены некоторые из вопросов:
Ошибка ответа от демона: Ошибка создания среды выполнения OCI: container_linux.go: 296
Проблема GitHub, котораявыглядело знакомо - все еще не имеет ответа и открыто.
Еще одна проблема GitHub - Возможно, лучшая ссылка на данный момент, но я все еще не могне заставить его работать.
Тот факт, что удаление флага громкости заставляет команду run
работать, меня сильно смущает.
Может кто-нибудь объяснить, что происходит в этом случае и указать мне правильное направление.
PS - Также я запускаю докер на MacOS (macOS High Sierra, если быть точным), и мне пришлось включить общий доступ к файлам в Docker-> Preferences -> File Sharing
с путем монтирования хоста (просто дополнительная информация !!).
Само собой разумеется, что я также пытался переопределить ENTRYPOINT
, пытаясь запустить что-то вроде /bin/sh /proj/project
, которое также не работало (поскольку он не мог найти исполняемый файл project
даже после упоминанияполный путь от root
).Я где-то читал, что изображение alpine
имеет только sh
и не имеет bash
.Я также изменяю привилегии моего исполняемого файла project
при сборке image
на a+x
, что тоже не работает.
Пожалуйста, дайте мне знать, если какая-то часть вопроса неясна.Я также проверил свой код здесь, в GitHub , если кто-то хочет воспроизвести ошибку.