docker安装nacos2.2.4详解(含:nacos容器启动参数、环境变量、常见问题整理)

一、镜像下载

1、在线下载

在一台能连外网的linux上执行docker镜像拉取命令

bash 复制代码
docker pull nacos:2.2.4

2、离线包下载

两种方式:

方式一:

-)在一台能连外网的linux上安装docker执行第一步的命令下载镜像

-)导出

bash 复制代码
# 导出镜像到本地当前目录
docker save -o nacos-2.2.4.tar nacos:2.2.4

方式二:

-)Window桌面程序:Docker Desktop

-)下载镜像

-)安装镜像导出插件(说明过程就复用了之前mysql的图)

-)将镜像文件保存到window本地(图略)

3、发布历史 | Nacos 官网

官方的下载地址,k8s环境用不上,因为官方没有发布镜像(自行打镜像的除外)

二、安装

1、在线安装

见离线安装(只比离线安装少一步导入动作)

2、离线安装

-)导入镜像

bash 复制代码
docker load -i nacos-2.2.4.tar

-)查看镜像

bash 复制代码
[docker@GZ***-PM153160 ~]$ docker images
REPOSITORY                                       TAG       IMAGE ID       CREATED         SIZE
nacos/nacos-server                               v2.2.4    f151dab7a111   19 months ago   814MB

-)创建映射目录

创建mysql配置文件目录、数据文件目录,并修改目录权限(不想挂载外部配置的此步聚可以跳过,nacos本身的日志查看容器日志一般也够用)

bash 复制代码
sudo mkdir -p /opt/nacos/docker-nacos/conf
sudo mkdir -p /data1/nacos/docker-nacos/log
sudo chown -R docker.docker /opt/nacos
# 作者data1目录下全是docker用户程序数据,所以没有指定子目录
sudo chown -R docker.docker /data1
# sudo chown -R docker.docker /data1/nacos

-)启动容器

bash 复制代码
docker run \
 --name smet-nacos \
 --network="host" \
 -e PREFER_HOST_MODE=ip \
 -e MODE=standalone \
 -e SPRING_DATASOURCE_PLATFORM=mysql \
 -e MYSQL_SERVICE_HOST=10.130.***.160 \
 -e MYSQL_SERVICE_PORT=3307 \
 -e MYSQL_SERVICE_DB_NAME=nacos \
 -e MYSQL_SERVICE_USER=nacos \
 -e MYSQL_SERVICE_PASSWORD='#!FlG*****' \
 -e NACOS_APPLICATION_PORT=8848 \
 -p 18848:8848 -p 19848:9848 -p 19849:9849 \
 -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" \
 -e NACOS_AUTH_TOKEN="bmFjb3MuY29yZS5hdXRoLnBsdWdpbi5uYWNvcy50**********=" \
 -e NACOS_AUTH_ENABLE=true \
 -e NACOS_AUTH_CACHE_ENABLE=true \
 -e NACOS_SERVER_TIMEOUT=5000 \
 -v /opt/nacos/docker-nacos/application.properties:/home/nacos/conf/application.properties \
 -d f151dab7a111

这个命令做了以下几件事:

  • --name smet-nacos:给容器命名为smet-nacos

  • --network="host":主机网络模式

  • -e PREFER_HOST_MODE=ip 使用IP模式

  • -e MODE=standalone 单机模式

  • -e SPRING_DATASOURCE_PLATFORM=mysql :使用mysql数据源

  • -e MYSQL_SERVICE_HOST=10.130.***.160 : mysql主机ip(与网络模式有关)

  • -e MYSQL_SERVICE_PORT=3307 : mysql主机port(与网络模式有关)

  • -e MYSQL_SERVICE_DB_NAME=nacos : 数据库名

  • -e MYSQL_SERVICE_USER=nacos : 数据库用户名

  • -e MYSQL_SERVICE_PASSWORD='#!FlG****' : 数据库用户密码

  • -e NACOS_APPLICATION_PORT=8848 : nacos端口

  • -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" :mysql jdbc 连接参数

  • -e NACOS_AUTH_TOKEN="bmFjb3MuY29yZS5hdXRoLnBsdWdpbi5uYWNvcy50b2tlbi5zZWNyZXQua2V5LnNtZXQ=" : 鉴权token(可选)

  • -e NACOS_AUTH_ENABLE=true : 鉴权开关(可选,与NACOS_AUTH_TOKEN配套)

  • -e NACOS_SERVER_TIMEOUT=5000 : nacos服务超时时间

  • -v /opt/nacos/docker-nacos/application.properties:/home/nacos/conf/application.properties :配置文件映射 (可选)

  • -p 18848:8848 -p 19848:9848 -p 19849:9849

  • -d :让容器在后台运行

  • f151dab7a111 : 使用的镜像id

-)查看容器

bash 复制代码
[docker@GZ***-PM153160 ~]$ docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS NAMES
54d8c2684e70   f151dab7a111  "bin/docker-startup...."   33 minutes ago   Up 33 minutes         smet-nacos

-)日志

bash 复制代码
OpenJDK 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
OpenJDK 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.

         ,--.
       ,--.'|
   ,--,:  : |                                           Nacos 2.2.4
,`--.'`|  ' :                       ,---.               Running in stand alone mode, All function modules
|   :  :  | |                      '   ,'\   .--.--.    Port: 8848
:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    '   Pid: 1
|   : '  '; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://10.130.153.160:8848/nacos/index.html
'   ' ;.    ;.--.  .-. | /    / ''   | |: :|  :  ;_
|   | | \   | \__\/: . ..    ' / '   | .; : \  \    `.      https://nacos.io
'   : |  ; .' ," .--.; |'   ; :__|   :    |  `----.   \
|   | '`--'  /  /  ,.  |'   | '.'|\   \  /  /  /`--'  /
'   : |     ;  :   .'   \   :    : `----'  '--'.     /
;   |.'     |  ,     .-./\   \  /            `--'---'
'---'        `--`---'     `----'

2025-01-30 21:15:42,440 INFO Tomcat initialized with port(s): 8848 (http)
2025-01-30 21:15:42,514 INFO Root WebApplicationContext: initialization completed in 3358 ms
2025-01-30 21:15:46,030 INFO Adding welcome page: class path resource [static/index.html]
2025-01-30 21:15:46,697 WARN You are asking Spring Security to ignore Ant [pattern='/**']. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead.
2025-01-30 21:15:46,698 INFO Will not secure Ant [pattern='/**']
2025-01-30 21:15:46,724 INFO Will secure any request with [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5cf3157b, org.springframework.security.web.context.SecurityContextPersistenceFilter@4adc663e, org.springframework.security.web.header.HeaderWriterFilter@3240b2a4, org.springframework.security.web.csrf.CsrfFilter@1e1e9ef3, org.springframework.security.web.authentication.logout.LogoutFilter@74e6094b, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@8bd86c8, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@2d3ef181, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@625dfff3, org.springframework.security.web.session.SessionManagementFilter@7d3fb0ef, org.springframework.security.web.access.ExceptionTranslationFilter@31c628e7]
2025-01-30 21:15:46,754 INFO Exposing 1 endpoint(s) beneath base path '/actuator'
2025-01-30 21:15:46,819 INFO Tomcat started on port(s): 8848 (http) with context path '/nacos'
2025-01-30 21:15:46,845 INFO Nacos started successfully in stand alone mode. use external storage

-)从容器内部拷贝配置文件

可选

bash 复制代码
[docker@GZ***-PM153160 ~]$ docker cp 54d8c2684e70:/home/nacos/conf/application.properties /opt/nacos/docker-nacos/application.properties
Successfully copied 12.3kB to /opt/nacos/docker-nacos/application.properties

-)调整其他配置(可选)

vi /opt/nacos/docker-nacos/application.properties

按需修改后,删除原容器,添加配置文件映射参数后重新创建容器

bash 复制代码
docker run \
 --name smet-nacos \
 --network="host" \
 -e PREFER_HOST_MODE=ip \
 -e MODE=standalone \
 -e SPRING_DATASOURCE_PLATFORM=mysql \
 -e MYSQL_SERVICE_HOST=10.130.***.160 \
 -e MYSQL_SERVICE_PORT=3307 \
 -e MYSQL_SERVICE_DB_NAME=nacos \
 -e MYSQL_SERVICE_USER=nacos \
 -e MYSQL_SERVICE_PASSWORD='#!FlG*****' \
 -e NACOS_APPLICATION_PORT=8848 \
 -p 18848:8848 -p 19848:9848 -p 19849:9849 \
 -e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" \
 -e NACOS_AUTH_TOKEN="bmFjb3MuY29yZS5hdXRoLnBsdWdpbi5uYWNvcy50**********=" \
 -e NACOS_AUTH_ENABLE=true \
 -e NACOS_AUTH_CACHE_ENABLE=true \
 -e NACOS_SERVER_TIMEOUT=5000 \
 -v /opt/nacos/docker-nacos/application.properties:/home/nacos/conf/application.properties \
 -d f151dab7a111

-)重启容器

bash 复制代码
[docker@GZ***-PM153160 ~]$ docker restart f151dab7a111
f151dab7a111

三、登陆

默认账密:nacos/nacos

四、总结

大家需要的docker安装nacos相关的所有知识点基本上都在此文中了,作者亲测有效,请放心参考~

附件一:遇到的问题总结

1、docker启动报No DataSource set

docker启动nacos 报 dumpservice bean construction failure : No DataSource set

可能的原因:

-)数据库配置不正确,或没有配置(本文上面的docker run。。。命令中带了),作者使用的host网络模式省去了很多麻烦,当然读者也可以使用其他网络模式,只要保证nacos容器能连上mysql服务就行。

2、docker启动日志显示use embeded storage

docker没有使用mysql存储模式启动

如果使用了mysql存储模式,应在日志最后显示:use external storage

可能的原因:

-)数据库配置不正确,或没有配置。参考作者上面的启动命令即可

附件二:docker网络模式

‌**Docker支持多种网络模式,主要包括以下几种**‌:‌

  1. ‌**Bridge模式**‌:这是Docker的默认网络模式。每个容器都会连接到虚拟网桥上,类似于一个虚拟交换机。容器之间可以通过IP地址或容器名称进行通信,但与外部网络隔离。Bridge模式适用于大多数标准应用场景,特别是需要容器之间通信但又与外部网络隔离时。

  2. ‌**Host模式**‌:在这种模式下,容器直接使用宿主机的网络接口,没有独立的IP地址。容器与宿主机共享网络栈,但与其他容器隔离。Host模式适用于需要高性能网络连接的应用,如高频交易系统、实时数据处理等。然而,这种模式的安全性较低,因为容器与宿主机共享网络。

  3. ‌**Container模式**‌:一个容器可以共享另一个容器的网络栈。新容器通过指定--net=container:<target_container>来共享目标容器的网络资源。这种模式适用于需要紧密协作的容器,如服务发现或负载均衡场景。然而,多个容器共享网络栈可能会影响安全性。

  4. ‌**None模式**‌:在这种模式下,容器没有分配网络接口,通常用于容器间的依赖关系,如使用Docker-in-Docker场景。None模式适用于不需要网络连接的容器,或者作为其他容器的网络依赖。

  5. ‌**Overlay网络**‌:这种模式允许跨主机的容器相互通信,而无需操作系统管理路由。Overlay网络适用于Docker Swarm集群,特别适合分布式应用的场景。

  6. ‌**IPvLAN模式**‌:这种模式提供对容器的IPv4和IPv6地址进行详细控制的能力,适用于需要精细控制容器IP地址、标记和路由的场景。

  7. ‌**Macvlan模式**‌:这种模式让容器像网络上的物理设备一样运行,通过为每个容器分配自己的MAC地址来实现。适用于需要像物理设备一样运行的容器场景。

选择合适的网络模式取决于具体的应用需求和部署环境。Bridge模式适用于大多数标准应用场景,Host模式适用于高性能需求,Container模式适用于紧密协作的容器,None模式适用于不需要网络连接的容器,Overlay、IPvLAN和Macvlan模式则提供了更高级的网络配置选项‌。

如果喜欢我的文章,请帮我点赞,谢谢~

相关推荐
YoYoYoWhatIsUp24 分钟前
Linux运维之Linux的安装和配置
linux·运维·服务器
大秦王多鱼40 分钟前
Kafka常见问题之 org.apache.kafka.common.errors.RecordTooLargeException
运维·分布式·kafka·apache
赵渝强老师1 小时前
【赵渝强老师】K8s中Pod探针的TCPSocketAction
云原生·容器·kubernetes
有你有我OK1 小时前
docker 启动镜像命令集合
docker
努力的小T1 小时前
Linux二进制部署K8s集群的平滑升级教程
linux·运维·服务器·云原生·容器·kubernetes·云计算
苹果醋32 小时前
Win10安装MySQL、Pycharm连接MySQL,Pycharm中运行Django
运维·vue.js·spring boot·nginx·课程设计
AI服务老曹3 小时前
提供算法模型管理、摄像头管理、告警管理、数据统计等功能的智慧园区开源了
运维·人工智能·安全·开源
WKJay_3 小时前
Linux 常用命令 - sort 【对文件内容进行排序】
linux·运维·服务器
我的青春不太冷3 小时前
深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
运维·服务器·前端