之前看到 DockerHub 上发布了 m1 芯片 aarch64 架构的 nacos 镜像, 所以就尝试的安装了下, 亲测可用: 

一. docker-compose.yml 编写

请确保自己的 mysql 服务已经启动了, 并且允许远程连接

volumes 挂载目录需要换成自己的目录

二. 容器运行和网络组

2.1 查看容器运行情况

docker ps | grep nacos 

然后使用 http://localhost:8848/nacos/# 可以登录到 nacos 运维控制台

2.2 查看容器网络组

使用 docker network ls 查看所有的 docker 网络组

使用 docker inspect nacos_default ls 可以查看 nacos 的网络信息, 可以看到

网络模式为 : bridge

容器ip为 : 172.22.0.2

三. 和mysql通信

由于我们的 docker-compose.yml 文件中指定的数据源是 mysql

3.1 查看 mysql 的运行情况(docker安装)

3.2 查看 mysql 的网络组以及容器ip

由于 172.19.0.2 是 mysql 容器内 ip, 并且使用的桥接模式, 所以 nacos 没办法使用这个 ip 和 mysql 通信

3.3 docker网络隔离

测试 nacos 容器内部和 mysql 通信, 可以发现无法 ping 通, 因为默认下, 2个不通网络组的容器是没办法互相通信的, 两个容器处于隔离的网络环境中, 这种隔离是 Docker 网络的默认行为, 旨在提供网络安全和隔离

3.4 解决方式

3.4.1 方式1(将两个容器链接到同一个网络组)

可以创建一个自定义网络并将两个容器都连接到这个网络上, 这样它们将能够使用分配给它们的容器内部 IP 地址互相通信, 这可以通过以下 Docker 命令完成:

my_custom_network 这个只是网络组名称, 可以随意起名

括号里换成, 对应的你的宿主机查看到的容器id

# 创建一个自定义桥接网络
docker network create --driver bridge my_custom_network

# 连接 MySQL 容器到这个网络
docker network connect my_custom_network (容器id或容器名)

# 连接 Nacos 容器到这个网络
docker network connect my_custom_network (容器id或容器名)

实际操作: 

3.4.1.1  创建桥接模式的网络组并查看网络组

      docker network create --driver bridge my_custom_network

3.4.1.2 链接nacos容器和mysql容器到该网络组

使用如下命令把2个容器连接到刚才创建的 my_custom_network 网络组

 docker network connect my_custom_network 52e9e9ff94aa
docker network connect my_custom_network 5c2614366917

52e9e9ff94aa 和 5c2614366917 是 nacos / mysql 的容器 id

之后使用 docker inspect my_custom_network 查看刚才创建的网络组下面的容器 ip, 可以发现之前不在同一个网络组的 nacos 和 mysql, 现在在同一个网络组下面

我们再次进去 nacos 容器测试 ping mysql 的 ip, 可以发现, 直接 ping mysql-server (容器名称)就可以 ping 通

或使用docker-compose 把 mysql, nacos 编排带同一个网络组下面, 可以发现, 2个服务都指定了

    networks:
      - nacos-network

这样容器启动的时候, 会把他们划分到同一个网络组里面, 可以直接只用容器内的 ip 通信

version: '3.8'  # 使用 Docker Compose 文件版本 3.8

services:
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword  # 设置 MySQL root 用户的密码
      MYSQL_DATABASE: nacos_db           # 创建一个数据库用于 Nacos
      MYSQL_USER: nacos_user             # 创建 MySQL 用户
      MYSQL_PASSWORD: nacos_password     # 设置 MySQL 用户密码
    ports:
      - "3306:3306"
    networks:
      - nacos-network

  nacos:
    image: nacos/nacos-server:latest
    depends_on:
      - mysql
    environment:
      SPRING_DATASOURCE_PLATFORM: mysql
      MYSQL_SERVICE_HOST: mysql
      MYSQL_SERVICE_DB_NAME: nacos_db
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: nacos_user
      MYSQL_SERVICE_PASSWORD: nacos_password
    ports:
      - "8848:8848"
    networks:
      - nacos-network

networks:
  nacos-network:
    driver: bridge
3.4.2 方式二(在宿主机上查看 docker 为我们划分的 bridge100 网段)

修改 nccos 的 application.yml 配置文件, 修改 db.url.0 的数据库连接地址ip为 192.168.64.1

附上完整的 nacos .application.yml 配置文件:

#spring
server.servlet.contextPath=/nacos
server.contextPath=/nacos
server.port=8848
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i

spring.datasource.platform=mysql

nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false

db.num=1
# 使用 bridge100 这个网络下的ip地址
db.url.0=jdbc:mysql://192.168.64.1:3306/nacos_config
db.user=root
db.password=root123

### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
### The default token:
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security}
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
# default current work dir
server.tomcat.basedir=file:.
## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

GitHub 加速计划 / compose / compose
33.28 K
5.15 K
下载
compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
最近提交(Master分支:3 个月前 )
5e3a0953 full diff: https://github.com/docker/cli/compare/v27.4.0-rc.1...8d1bacae3e49ed1d096eede8eef4ae851d7f2eae Signed-off-by: Sebastiaan van Stijn <github@gone.nl> 6 天前
a2a3eb72 - full diff: https://github.com/docker/cli/compare/cb3048fbebb1...v27.4.0-rc.1 Signed-off-by: Sebastiaan van Stijn <github@gone.nl> 6 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐