#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
.