gpt4 book ai didi

node.js - 从容器内服务网格的网站

转载 作者:行者123 更新时间:2023-12-02 19:18:30 25 4
gpt4 key购买 nike

我有一个使用gridsome构建的静态网站,正在尝试docker容器化,并提出了以下Dockerfile:

FROM node:14.2.0-alpine3.10

RUN apk update && apk upgrade
RUN apk --no-cache add git g++ gcc libgcc libstdc++ linux-headers make python yarn

ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
USER node
RUN npm i --global gridsome
RUN yarn global add serve

COPY --chown=node:node gridsome-website/ /home/node/build/
RUN echo && ls /home/node/build/ && echo
WORKDIR /home/node/build
USER node
RUN npm cache clean --force
RUN npm clean-install

# My attempt to serve the website from within, build is successful but serve command doesn't work
CMD ~/.npm-global/bin/gridsome build && serve -d dist/


在通过以下方式运行容器之后,Gridsome默认使用端口8080:
docker run --name my-website -d my-website-image

它不会失败,但是我无法使用链接 http://localhost:8080来访问我的网站,容器在运行后立即停止执行。我尝试通过以下方式从容器中复制`dist /``文件夹:
$ docker cp my-website:/home/node/build/dist ./dist

然后使用以下命令从终端手动提供服务:
$ serve -d dist/

它可以在终端上运行,但是为什么不能在容器内运行呢?

最佳答案

Gridsome的要点是它会生成一个静态站点,您可以在任何可以放置文件的地方托管它,对吗?除了简单的网络服务器来托管它之外,您不需要nodejs或其他任何东西。

如果您想产生一个干净的生产Docker镜像来服务Gridsome构建的静态文件,那么这是多阶段Dockerfile的一个好用例。在第一阶段,您将构建Gridsome项目。在第二个也是最后一个阶段,您可以使用干净的nginx图像,其中包含您的dist文件夹,没有其他内容。

它可以像这样简单:

FROM node:current AS builder
WORKDIR /build
COPY gridsome-website ./
RUN npm install && gridsome build

FROM nginx:stable
COPY --from=builder /build/dist /usr/share/nginx/html/
EXPOSE 80

使用8080-> 80端口映射构建和运行镜像后,可以访问 http://127.0.0.1:8080来访问您的站点。
docker build -t my-website-image .
docker run -p 8080:80 my-website-image

设置一个至少忽略 .dockerignorenode_modules文件可能是一个好主意。

$ cat .dockerignore
gridsome-website/node_modules

关于node.js - 从容器内服务网格的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61811025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com