docker 部署nacos1.4.7
- 一、docker環境
- 二、下載nacos-server:1.4.8
- 三、在nacos目錄中新建DockerFile
- 五、問題:運行後,容器直接不啓動
一、docker環境
1、docker鏡像源
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.1panel.live",
"https://dockerhub.icu",
"https://docker.aws19527.cn",
"https://docker.anyhub.us.kg",
"https://docker.m.daocloud.io"
]
}
二、下載nacos-server:1.4.8
地址:https://codeload.github.com/alibaba/nacos/zip/refs/tags/1.4.8 目錄:
三、在nacos目錄中新建DockerFile
# 1. 基礎鏡像:使用 Java 8(Nacos 1.4.8 依賴 JDK 8,推薦 openjdk:8-jre-slim 輕量版)
FROM openjdk:8-jre-slim
# 2. 維護者信息(可選)
# LABEL maintainer="your-name <your-email>"
LABEL version="1.4.8"
LABEL description="Nacos-Server 1.4.8 自定義鏡像"
# 3. 安裝必要依賴(可選,解決 startup.sh 可能的執行問題)
RUN apt-get update && apt-get install -y --no-install-recommends \
bash \
curl \
&& rm -rf /var/lib/apt/lists/*
# 4. 創建 Nacos 工作目錄
WORKDIR /home/nacos
# 5. 複製本地文件到鏡像中
# 複製 bin 目錄(啓動腳本)
COPY bin/ ./bin/
# 複製 conf 目錄(配置文件)
COPY conf/ ./conf/
# 複製 target 目錄(核心 JAR 包)
COPY target/ ./target/
# 複製 data 和 logs 目錄(可選,鏡像中可空,運行時掛載宿主機目錄)
COPY data/ ./data/
COPY logs/ ./logs/
# 6. 給啓動腳本添加執行權限(關鍵:避免啓動時權限不足)
RUN chmod +x ./bin/startup.sh
# 7. 配置環境變量(可選,用於 startup.sh 讀取,如 JVM 參數、Nacos 模式等)
# 示例:設置 JVM 堆內存(根據實際需求調整)
ENV JAVA_OPTS="-Xms512m -Xmx1024m"
# 示例:設置 Nacos 啓動模式(standalone 單機模式,cluster 集羣模式,默認單機)
ENV MODE="standalone"
# 示例:設置 Nacos 端口(默認 8848,需與 application.properties 一致)
ENV NACOS_PORT="8848"
# 8. 暴露 Nacos 端口(默認 8848,若配置文件改了端口,需同步修改)
EXPOSE 8848
# 9. 啓動命令(關鍵:執行 startup.sh,指定單機模式)
# 注:startup.sh 已支持通過 MODE 環境變量指定模式,無需在命令後加 -m standalone
CMD ["./bin/startup.sh"]
3、在nacos目錄下構建:
docker build -t nacos-server:1.4.8 .
4、查看
docker images | grep nacos-server
# 輸出示例:nacos-server 1.4.8 鏡像ID 幾分鐘前 500MB左右
四、運行 Nacos 容器
1、單機模式運行(掛載目錄需要自行修改):
docker run -d \
--name nacos-1.4.8 \
-p 8848:8848 \
-v /path/to/your/nacos/data:/home/nacos/data \ # 掛載數據目錄(持久化)
-v /path/to/your/nacos/logs:/home/nacos/logs \ # 掛載日誌目錄(方便查看)
-e MODE=standalone \
-e JAVA_OPTS="-Xms512m -Xmx1024m" \ # 可選:調整JVM內存
nacos-server:1.4.8
windows運行(掛載在本地):
docker run -d --name nacos-1.4.8 --restart=always -p 8848:8848 -v D://work/xinchao-projects/my/nacos-server-1.4.8/nacos/data:/home/nacos/data -v D://work/xinchao-projects/my/nacos-server-1.4.8/nacos/logs:/home/nacos/logs nacos-server:1.4.8 ./bin/startup.sh -m standalone
Mac運行(掛載到本地):
docker run -d --name nacos-1.4.8 --restart=always -p 8848:8848 -v /Users/tangyuan/work/java-projects/my-projects/nacos-server-1.4.8/nacos/data -v /Users/tangyuan/work/java-projects/my-projects/nacos-server-1.4.8/nacos/logs nacos-server:1.4.8 ./bin/startup.sh -m standalone
五、問題:運行後,容器直接不啓動
解決:
1、容器沒有啓動,也進不去,所以採用交互模式啓動容器
# 停止並刪除舊測試容器
docker stop nacos-test && docker rm nacos-test
# 交互模式啓動容器(進入 bash 終端)
docker run -it --name nacos-test -p 8848:8848 -e MODE=standalone nacos-server:1.4.8 /bin/bash
在容器終端內手動執行 startup.sh:進入容器後,直接執行啓動腳本,觀察實時輸出(此時會直接打印報錯,而非寫入日誌):
# 進入容器後,執行以下命令
cd /home/nacos
./bin/startup.sh -m standalone
查看日誌:發現日誌是正常輸出的
瀏覽器訪問http://localhost:8848/nacos
nacos正常啓動;
但是exit; 退出後容器就立即退出了,説明:
交互模式(-it)啓動時,你手動執行了 startup.sh,但腳本是「前台運行」的;當你退出容器終端(exit)時,前台進程被終止,容器隨之停止(Docker 容器的生命週期與前台進程綁定,前台進程退出,容器就會停止)。
而之前的後台啓動命令(-d)之所以失敗,是因為 startup.sh 腳本默認會「後台運行 Nacos」(腳本內部會 fork 子進程),導致容器的前台進程退出,容器直接停止(相當於 “啓動完就跑路”)。
修復:
打開 startup.sh,搜索以下內容(Nacos 1.4.8 腳本關鍵代碼):
bash
運行
# 原腳本中啓動 JVM 的命令(大概在 260 行左右,不同版本行數可能略有差異)
nohup $JAVA -Dserver.port=${PORT} $JAVA_OPTS $NACOS_OPTS -jar ${BASE_DIR}/target/${JAR_NAME} $OPT_PARAMS > ${BASE_DIR}/logs/start.out 2>&1 &
刪除 nohup 和末尾的 &(這兩個是讓腳本後台運行的關鍵),修改後如下:
bash
運行
# 修改後的前台啓動命令(刪除 nohup 和末尾的 &)
$JAVA -Dserver.port=${PORT} $JAVA_OPTS $NACOS_OPTS -jar ${BASE_DIR}/target/${JAR_NAME} $OPT_PARAMS > ${BASE_DIR}/logs/start.out 2>&1
説明:nohup 是 “忽略掛起信號”,& 是 “後台運行”,刪除後 JVM 會以前台進程運行,容器會一直存活(容器生命週期與 JVM 進程綁定)。
保存腳本,確保本地腳本已更新(若之前替換過官方腳本,需重新修改)。
重新build鏡像,然後運行
# 刪除原有
docker rmi -f nacos-server:1.4.8
# 進入nacos目錄下 重新構建鏡像
docker build -t nacos-server:1.4.8 .
# 啓動(這裏把日誌掛載到了我本地的磁盤):
docker run -d --name nacos-1.4.8 -p 8848:8848 -v D://work/xinchao-projects/my/nacos-server-1.4.8/nacos/data:/home/nacos/data -v D://work/xinchao-projects/my/nacos-server-1.4.8/nacos/logs:/home/nacos/logs nacos-server:1.4.8 ./bin/startup.sh -m standalone
啓動成功:
訪問頁面:http://localhost:8848/nacos,正常了