我有以下 Dockerfile(构建 Vue.js 应用程序):
# build stage
FROM node:lts-alpine as build-stage
RUN apk add gettext libintl
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
ARG API_URL
RUN envsubst < ./src/config.js.tmpl > ./src/config.js
RUN ls
RUN npm run build
RUN ls
# production-stage
FROM nginx:stable-alpine as production-stage
ARG API_PROXY_PATH
ARG SERVER_NAME
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY ./nginx/prod.conf.tmpl /temp/prod.conf.tmpl
RUN envsubst '$API_PROXY_PATH $SERVER_NAME' < /temp/prod.conf.tmpl > /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
这在我的 Windows 机器(使用 Docker Toolbox)和 Centos7 机器上运行良好。应用程序构建并运行良好。
但是,当我尝试在带有 Ubuntu 18.04(也尝试过 16.04)的服务器上构建它时,npm run build
它似乎无法正常工作。它像往常一样运行并且不会抛出任何错误,但是在构建dist
文件夹丢失之后,第二阶段失败了。
在 Windows 和 Centos 桌面上,第二个ls
命令显示如下:
Dockerfile
README.md
babel.config.js
dist
nginx
node_modules
package-lock.json
package.json
public
src
但是在 Ubuntudist
上没有出现文件夹。
Dockerfile
README.md
babel.config.js
nginx
node_modules
package-lock.json
package.json
public
src
Docker 和 docker-compose 版本是一样的。为什么会发生这种情况以及如何解决?我不知道:(提前谢谢。
UPD:我尝试创建 Centos 服务器,它显示相同的行为(未创建 dist 文件夹),尽管它在 Centos 桌面上运行正常。在这两种情况下,代码都是通过 git clone 从 github 检索到的。所以可能这不是操作系统问题。
UPD2:发生了非常奇怪的事情。我已经在所有可能的地方进行了测试,但未能重现它,所以我的假设是这个问题与我的 VPS 提供商有关。该构建在 Windows 桌面(Docker Toolbox)、Centos7 桌面、VirtualBox 中的 Ubuntu 桌面和 VB 中的 Ubuntu Server 以及来自另一个 VPS 提供商的虚拟机上运行良好。它只是不适用于我最初的 VPS 提供商的 VPS(Ubuntu 和 Centos7)。我要联系他们的支持。
这是要复制的仓库:https ://github.com/DanielTitkov/pagie 可以按原样使用 docker-compose 构建,只有 .env.dist 应重命名为 .env