chakasoft commited on
Commit
c7fa6f3
·
verified ·
1 Parent(s): 2e6a0e4

使用 ENTRYPOINT 確保我們的 IPv4 修正參數一定會被執行,防止被平台覆蓋。

Browse files
Files changed (1) hide show
  1. Dockerfile +12 -8
Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- # 使用 Node.js 20,以符合最新版 n8n 的要求
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
- # --- 啟動 n8n (最終修正) ---
55
- # 直接修改啟動指令,強制 Node.js 在啟動 n8n 時優先使用 IPv4
56
- # 這比依賴 NODE_OPTIONS 環境變數更可靠
57
- CMD ["node", "--dns-result-order=ipv4first", "/usr/local/bin/n8n"]
 
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"]