docker容器中的IP地址和主机是一样的吗 docker容器内ip

admin2024-06-01  40

MacOS 10.15
mysql版本: 8.0.11
node版本:18.19.0

解决方式:

使用docker inspect + mysql容器的地址。 进入容器查看该容器的ip地址。

docker容器中的IP地址和主机是一样的吗 docker容器内ip,docker容器中的IP地址和主机是一样的吗 docker容器内ip_docker,第1张

nestjs应用中将mysql的连接改为容器内部的地址。这些配置尽量写在配置文件中,我这里为了方便演示直接写死了。

TypeOrmModule.forRoot({
  type: 'mysql',
  host: '172.19.0.2', 
  port: 3306,
  username: 'root',
  password: 'password',
  database: 'db_name',
  autoLoadEntities: true,
  synchronize: true,
  logging: true,
  connectorPackage: 'mysql2',
  extra: {
    authPlugin: 'sha256_password',
  },
});

docker-compse配置

version: '3'
services:
 # 我的nest服务名称
  nest-master:
    image: node:18.19.0
   _name: 'zz_master'
    # nest项目打包时,用的是他自己目录下的 Dockerfile
    # 依赖于另外两个 service,另外两个 service 会先被构建
    working_dir: /nest-backend-service
    volumes:
      - ./:/nest-backend-service
    command: npm run start:dev
    depends_on:
      - zz-mysql-7
    # 端口映射,左边是宿主机上的端口 7008,也就是你打开浏览器http://localhost:7008 可以访问到 nest 的接口,而在容器内部他是运行在 7007 上
    ports:
      - '3000:3000'
    # 失败时重启,有时候 mysql 没启动起来,nest 已经完事了,就会连不上 mysql,所以一直重启,知道 mysql 启动成功
    # 不过你的项目如果有bug,他就会无限重启,所以要自己注意了
    # restart: on-failure
    # 声明他们在zzstudio-server 这个网络中,可以用container_name进行访问
    # 不声明的话,也会在同一个网络中,名称默认是 项目_default, 比如我这个项目叫 zz-nest, 默认的网络名称就是 zz-nest_default
    networks:
      - zzstudio-server
  # 我的 mysql 服务的名称
  zz-mysql-7:
    # 我指定的容器名,当 nest服务(也就是上边的 nest-master)要访问 mysql 时,mysql的 host 就配置为 zz_mysql
   _name: 'zz_mysql'
    image: mysql:8.0.11
    # 端口映射,当你从外部访问 3307 时会被映射到容器内部的 3306 上。
    # 因为这里我们三个服务在同一个网络下,所以我们prod.env 使用的应该是 3306
    ports:
      - '3307:3306'
    # 挂载的本地目录
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    volumes:
      - /usr/mysql:/var/lib/mysql
      # 可以用于初始化时执行一些 sql,我查阅的野文里,有的用来解决数据库没有被创建,或用来表结构初始化,有需要的自行尝试
      # - ./init.sql/:/docker-entrypoint-initdb.d/init.sql

    # 相关的环境变量,密码应该是必须要设置的,忘了咋回事了
    environment:
      # 如果你的 mysql 是 8.x 不要指定 MYSQL_USER=root,会报错
      # 在指定了MYSQL_DATABASE后,会自动创建这个数据库!
      MYSQL_DATABASE: micro_app 
      MYSQL_ROOT_PASSWORD: A887563$
    # 同样,显式的声明在一个网络下
    networks:
      - zzstudio-server
# 声明网络,和上边所有的 server 下边的 networks 相对应
networks:
  zzstudio-server:
    driver: bridge

此时nestjs服务已经运行正常了

docker容器中的IP地址和主机是一样的吗 docker容器内ip,docker容器中的IP地址和主机是一样的吗 docker容器内ip_docker_02,第2张


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!