要把 Vue3 專案放入 Docker 中非常簡單,建立一個 Dockerfile:
打包成 docker image:
執行:
不過,有個小問題,如果使用連結進入時會出現 nginx 的 404 畫面。因為我們把 vue3 打包成一個 html 檔案,其他連結例如 /page1 進來時找不到對應的 html 檔案,於是就出現 nginx 的 404 頁面了。
要解決也很簡單,可以透過調整 nginx 的設定檔,將連結轉給 index.html 這個檔案即可。
我們建立 nginx/default.conf 這個檔案,並填入以下內容:
然後修改 Dockerfile ,將這個設定檔的內容放入容器內,取代原本的設定檔:
再次部署後導向我們有的路徑就不會再出現 404 了!
FROM node:19.7 as build-stage
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
打包成 docker image:
docker build -t my_vue_docker_image .
執行:
docker run -d --name my_vue_docker_container -p 80:80 my_vue_docker_image
不過,有個小問題,如果使用連結進入時會出現 nginx 的 404 畫面。因為我們把 vue3 打包成一個 html 檔案,其他連結例如 /page1 進來時找不到對應的 html 檔案,於是就出現 nginx 的 404 頁面了。
要解決也很簡單,可以透過調整 nginx 的設定檔,將連結轉給 index.html 這個檔案即可。
我們建立 nginx/default.conf 這個檔案,並填入以下內容:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
然後修改 Dockerfile ,將這個設定檔的內容放入容器內,取代原本的設定檔:
FROM node:19.7 as build-stage
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY nginx/default.conf /etc/nginx/conf.d/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
再次部署後導向我們有的路徑就不會再出現 404 了!
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com