Dockerfile с пользовательским родительским изображением

#docker #http #dockerfile

#докер #http #докерфайл

Вопрос:

Как я могу использовать существующие изображения в качестве FROM параметра в dockerfile?

Я пытаюсь настроить приложение VueJS, но хотел, чтобы pierrezemb / gostatic был базовым изображением — это крошечный http-сервер, который, в принципе, способен размещать файлы и каталоги. Однако при запуске завершенного изображения и проверке открытого порта в браузере index.html файл загружается, но все остальные ресурсы во вложенных папках 404 завершаются с ошибкой: The resource from “http://localhost:8043/js/app.545bfbc1.js” was blocked due to MIME type (“text/plain”) mismatch (X-Content-Type-Options: nosniff) . Скручивание ресурса возвращает только 404.

Вероятно, это связано с тем, что базовый образ gostatic создается как очень автономный, не включаемый в качестве FROM параметра в Dockerfile. Когда я сам создаю код и использую gostatic для размещения каталога, все в порядке. Когда я создаю с помощью Dockerfile, сборка завершается успешно, но я получаю вышеупомянутые ошибки при попытке получить ресурсы не в главном каталоге.

Идеальный вариант автономного использования:

 docker run -d -p 80:8043 -v path/to/website:/srv/http --name goStatic pierrezemb/gostatic
 

Текущий Dockerfile

 FROM pierrezemb/gostatic AS deployment

COPY ./dist/* /srv/http/
EXPOSE 8043

# Note, gostatic calls: ENTRYPOINT ["/goStatic"]
# Therefore CMD need only be goStatic parameters
CMD ["-enable-health", "-enable-logging"]
 

Обратите внимание, что папка dist создана и функционирует. Также примечательно, что конечная точка работоспособности не работает, и ведение журнала отсутствует (для чего установлены флаги). Ясно, что я неправильно обрабатываю родительский образ

Я создаю и запускаю следующие команды:

 docker build -t tweet-dash .
docker run -d -p 8043:8043 --name dash tweet-dash
 

Dockerfile для goStatic находится здесь

Ответ №1:

На самом деле это почти точно так, как вы должны использовать существующие изображения: все здесь делается правильно.

Для тех, кто придет позже; обратите внимание на Dockerfile родительского базового образа — создайте свой собственный, открыв его рядом с собой. Выясните, как использовать изображение само по себе, сначала как автономное, а затем посмотрите, можете ли вы добавить к нему.

В этом случае Dockerfile немного некорректен: когда вы копируете каталог файлов COPY ./dist/* /srv/http , docker будет рекурсивно перебирать структуру файлов и добавлять каждый отдельный файл /srv/http . Никакие папки не будут сохранены.

Это можно исправить, выполнив COPY ./dist /srv/http .