【问题标题】:serve a gridsome website from within the container从容器内提供一个网格网站
【发布时间】:2020-08-31 19:03:55
【问题描述】:

我有一个使用 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默认使用8080端口,这就是为什么
  • docker run --expose 8080 -p 8080:8080 ...?
  • 不起作用,这不是我想要在这里实现的目标
  • 试图复制 docker 构建但出现错误,您能否链接一个最小可复制示例? - 谢谢

标签: node.js docker npm dockerfile gridsome


【解决方案1】:

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

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

$ cat .dockerignore
gridsome-website/node_modules

【讨论】:

    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多