在多阶段 docker 构建期间访问 nginx 端点
accessing nginx endpoint during a multi-stage docker build
我正在尝试通过 HTTP 抓取静态 html 站点作为构建 docker 图像的一部分。当我尝试 curl
http://localhost 时,连接被拒绝。当我删除 curl
语句和 运行 容器时,静态内容按预期在本地主机上可用(包括容器内的 运行ning curl
)。
有什么方法可以在构建期间访问 nginx 端点吗?
FROM ubuntu AS indexer
RUN apt-get update && apt-get install -y nginx
RUN apt-get update && apt-get install -y curl
COPY --from=builder /workdir/build /usr/share/nginx/html
RUN service nginx start
RUN curl http://localhost > /tmp/index.html
在 运行 curl
之前,我曾尝试等待端口 80 可用,但这没有任何区别。
在每个 运行 语句之间,构建状态 'machine' 被破坏,并为下一个 运行 语句启动一个新状态。所以当你在一个 运行 语句中启动 nginx 时,当你到达下一个时它就消失了。
要完成您想要做的事情,nginx 需要在与您进行抓取相同的 运行 语句中启动。
像这样
FROM ubuntu AS indexer
RUN apt-get update && apt-get install -y nginx
RUN apt-get update && apt-get install -y curl
COPY --from=builder /workdir/build /usr/share/nginx/html
RUN service nginx start && sleep 10 && curl http://localhost > /tmp/index.html
通过nginx而不是文件系统来访问文件确实有点奇怪。在您发布的(公认有限的)示例中,您可以做
RUN cp /usr/share/nginx/html/index.html /tmp/
相反。
我正在尝试通过 HTTP 抓取静态 html 站点作为构建 docker 图像的一部分。当我尝试 curl
http://localhost 时,连接被拒绝。当我删除 curl
语句和 运行 容器时,静态内容按预期在本地主机上可用(包括容器内的 运行ning curl
)。
有什么方法可以在构建期间访问 nginx 端点吗?
FROM ubuntu AS indexer
RUN apt-get update && apt-get install -y nginx
RUN apt-get update && apt-get install -y curl
COPY --from=builder /workdir/build /usr/share/nginx/html
RUN service nginx start
RUN curl http://localhost > /tmp/index.html
在 运行 curl
之前,我曾尝试等待端口 80 可用,但这没有任何区别。
在每个 运行 语句之间,构建状态 'machine' 被破坏,并为下一个 运行 语句启动一个新状态。所以当你在一个 运行 语句中启动 nginx 时,当你到达下一个时它就消失了。
要完成您想要做的事情,nginx 需要在与您进行抓取相同的 运行 语句中启动。
像这样
FROM ubuntu AS indexer
RUN apt-get update && apt-get install -y nginx
RUN apt-get update && apt-get install -y curl
COPY --from=builder /workdir/build /usr/share/nginx/html
RUN service nginx start && sleep 10 && curl http://localhost > /tmp/index.html
通过nginx而不是文件系统来访问文件确实有点奇怪。在您发布的(公认有限的)示例中,您可以做
RUN cp /usr/share/nginx/html/index.html /tmp/
相反。