带有自定义父图像的Dockerfile



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

我正在尝试dockerize一个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。

这可能是因为静态基本映像被创建为非常独立的,而不是作为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在这里

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

对于后面的;注意父基本映像的Dockerfile——构建自己的Dockerfile,并在旁边打开它。弄清楚如何单独使用图像,首先作为一个独立的图像,然后看看是否可以添加到它上面。

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

这可以通过执行COPY ./dist /srv/http来修复。

最新更新