带有自定义父映像的 Dockerfile

时间:2021-01-29 15:13:14

标签: docker http dockerfile

如何将现有图像用作 dockerfile 中的 FROM 参数?

我正在尝试对 VueJS 应用程序进行 dockerize,但希望 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

goStatic 的 Dockerfile 是 here

1 个答案:

答案 0 :(得分:0)

这实际上几乎就是您应该使用现有图像的方式:这里的一切都正确完成。

对于那些后来者;注意父基础镜像的 Dockerfile —— 构建你自己的,它在你旁边打开。弄清楚如何单独使用图像,首先作为独立使用,然后看看是否可以添加。

在这种情况下,Dockerfile 有点不正确:当您使用 COPY ./dist/* /srv/http 复制文件目录时,docker 将递归遍历文件结构并将每个单独的文件添加到 /srv/http。不会保留任何文件夹。

这可以通过执行 COPY ./dist /srv/http 来解决。

相关问题