使用 ENTRYPOINT 確保我們的 IPv4 修正參數一定會被執行,防止被平台覆蓋。
Browse files- Dockerfile +12 -8
Dockerfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
# 使用 Node.js 20
|
2 |
FROM node:20-alpine
|
3 |
|
4 |
# --- Build-time arguments ---
|
@@ -20,6 +20,7 @@ ENV DB_POSTGRESDB_PASSWORD=""
|
|
20 |
ENV DB_POSTGRESDB_SSL=true
|
21 |
|
22 |
# --- 安裝系統依賴 ---
|
|
|
23 |
USER root
|
24 |
RUN apk add --no-cache \
|
25 |
git \
|
@@ -32,26 +33,29 @@ RUN apk add --no-cache \
|
|
32 |
harfbuzz \
|
33 |
ca-certificates \
|
34 |
dbus-glib \
|
35 |
-
fontconfig
|
|
|
|
|
36 |
|
37 |
# --- 安裝 n8n 和 Playwright 套件 ---
|
|
|
38 |
RUN npm install -g n8n@${N8N_VERSION} playwright puppeteer --omit=dev
|
39 |
|
40 |
# --- 安裝 Playwright 的瀏覽器二進位檔案 ---
|
41 |
RUN npx playwright install
|
42 |
|
43 |
-
# ---
|
44 |
RUN mkdir -p ${N8N_PATH} && \
|
45 |
chown -R node:node /home/node
|
46 |
|
47 |
-
# --- 切換到非 root
|
48 |
USER node
|
49 |
WORKDIR /home/node
|
50 |
|
51 |
# --- 開放 n8n 預設端口 ---
|
52 |
EXPOSE 5678
|
53 |
|
54 |
-
# ---
|
55 |
-
#
|
56 |
-
#
|
57 |
-
|
|
|
1 |
+
# 使用 Node.js 20,這是一個穩定且符合 n8n 要求的版本
|
2 |
FROM node:20-alpine
|
3 |
|
4 |
# --- Build-time arguments ---
|
|
|
20 |
ENV DB_POSTGRESDB_SSL=true
|
21 |
|
22 |
# --- 安裝系統依賴 ---
|
23 |
+
# 融合了我們原本的依賴和參考檔案中的實用工具 (ffmpeg, yt-dlp)
|
24 |
USER root
|
25 |
RUN apk add --no-cache \
|
26 |
git \
|
|
|
33 |
harfbuzz \
|
34 |
ca-certificates \
|
35 |
dbus-glib \
|
36 |
+
fontconfig \
|
37 |
+
ffmpeg \
|
38 |
+
yt-dlp
|
39 |
|
40 |
# --- 安裝 n8n 和 Playwright 套件 ---
|
41 |
+
# 使用你期望的最新版 n8n,並同時安裝 playwright 和 puppeteer
|
42 |
RUN npm install -g n8n@${N8N_VERSION} playwright puppeteer --omit=dev
|
43 |
|
44 |
# --- 安裝 Playwright 的瀏覽器二進位檔案 ---
|
45 |
RUN npx playwright install
|
46 |
|
47 |
+
# --- 設定正確且安全的權限 ---
|
48 |
RUN mkdir -p ${N8N_PATH} && \
|
49 |
chown -R node:node /home/node
|
50 |
|
51 |
+
# --- 切換到非 root 用戶,提升安全性 ---
|
52 |
USER node
|
53 |
WORKDIR /home/node
|
54 |
|
55 |
# --- 開放 n8n 預設端口 ---
|
56 |
EXPOSE 5678
|
57 |
|
58 |
+
# --- 最終、權威的啟動指令 ---
|
59 |
+
# 使用 ENTRYPOINT 確保我們的 IPv4 修正參數一定會被執行,防止被平台覆蓋。
|
60 |
+
# 這是解決 ENETUNREACH 網路錯誤的關鍵。
|
61 |
+
ENTRYPOINT ["node", "--dns-result-order=ipv4first", "/usr/local/bin/n8n"]
|