【docker 部署nacos1.4.7】

docker 部署nacos1.4.7

一、docker环境

1、docker镜像源

powershell 复制代码
{
  "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

powershell 复制代码
# 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目录下构建:

powershell 复制代码
docker build -t nacos-server:1.4.8 .

4、查看

powershell 复制代码
docker images | grep nacos-server
# 输出示例:nacos-server  1.4.8  镜像ID  几分钟前  500MB左右

四、运行 Nacos 容器

1、单机模式运行(挂载目录需要自行修改):

powershell 复制代码
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运行(挂载在本地):

powershell 复制代码
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

五、问题:运行后,容器直接不启动

解决:

powershell 复制代码
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; 退出后容器就立即退出了,说明:

powershell 复制代码
交互模式(-it)启动时,你手动执行了 startup.sh,但脚本是「前台运行」的;当你退出容器终端(exit)时,前台进程被终止,容器随之停止(Docker 容器的生命周期与前台进程绑定,前台进程退出,容器就会停止)。
而之前的后台启动命令(-d)之所以失败,是因为 startup.sh 脚本默认会「后台运行 Nacos」(脚本内部会 fork 子进程),导致容器的前台进程退出,容器直接停止(相当于 "启动完就跑路")。

修复:

powershell 复制代码
打开 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镜像,然后运行

powershell 复制代码
# 删除原有
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,正常了

相关推荐
虾..2 小时前
Linux 进程状态
linux·运维·服务器
测试者家园2 小时前
DevOps 到底改变了测试什么?
运维·自动化测试·软件测试·devops·持续测试·智能化测试·软件测试和开发
j200103222 小时前
Docker 部署与管理
docker·容器·eureka
weixin_537765802 小时前
【Docker基础】常用命令详解
docker·容器·eureka
mobº3 小时前
K8s 集群部署微服务 - yaml 版本(三)
微服务·容器·kubernetes
阿拉斯攀登3 小时前
CentOS 7.9 上 Docker 安装、配置与实战使用指南
docker·centos
jiayong233 小时前
多子系统架构下的Nginx部署策略与最佳实践
运维·nginx·系统架构
皮糖小王子4 小时前
Docker打开本地镜像
运维·docker·容器
❀͜͡傀儡师4 小时前
docker 部署Flink和传统部署
docker·容器·flink