后端容器 ip 无法使用 docker 连接到数据库 mysql

Posted

技术标签:

【中文标题】后端容器 ip 无法使用 docker 连接到数据库 mysql【英文标题】:Backend container ip unable to connect to the database mysql using docker 【发布时间】:2022-01-20 20:44:16 【问题描述】:

我的数据库 IP 是 172.21.0.2,后端是 172.21.0.3。我是 docker 的菜鸟,你能解释一下为什么后端容器无法连接到数据库吗?非常感谢。

错误信息:

这是我的 dockerfile:

    FROM node:15.4

    WORKDIR /app
    COPY package.json . 
    RUN npm install
    COPY . . 

    CMD npm run start:dev

docker-compose.yml 文件:

    version: '3.9'
    services:
      backend:
        build: .
        ports:
         - 8000:3000
        volumes: 
         - .:/app
        depends_on:
         - db

     db:
      image: mysql:5.7.22
      restart: always
      environment:
        MYSQL_DATABASE: admin
        MYSQL_USER: root
        MYSQL_PASSWORD: root
        MYSQL_ROOT_PASSWORD: root
        volumes: 
         - .dbdata:/var/lib/mysql
        ports:
         - 33066:3306

和 app.module.ts:

@Module(
   imports: [UserModule, TypeOrmModule.forRoot(
   type: 'mysql',
   host: 'db',
   port: 3306,
   username: 'root',
   password: 'root',
   database: 'admin',
   autoLoadEntities: true,
   synchronize: true,
  ), AuthModule],
 controllers: [AppController],
 providers: [AppService],
)
export class AppModule 

【问题讨论】:

请不要发代码截图,把文字贴在代码块里。 好的,我已经改好了 谢谢;您的第一个屏幕截图也是文本数据。 如果您的数据库已经存在,那么您设置的环境变量(如 MYSQL_USER)不会用于任何事情。它们仅在数据库尚不存在且启动脚本必须创建它时使用。因此,如果数据库已经存在并且已经使用其他参数创建,那么它们可能不是您所期望的。尝试删除 .dbdata 目录以确保没有旧数据。 在您的应用模块中,尝试将主机:'db' 更改为主机:'docker.host.internal' 顺便说一句,您在端口 33066 上公开数据库,但尝试使用 3306 访问它。 【参考方案1】:

事实证明,只需删除/删除 db volumes: - .dbdata:/var/lib/mysql

【讨论】:

以上是关于后端容器 ip 无法使用 docker 连接到数据库 mysql的主要内容,如果未能解决你的问题,请参考以下文章

无法从 docker 容器连接到 SQL Server

无法使用 docker 连接到 ipv6 中的 postgres

docker wordpress 容器无法连接到数据库容器

无法使用 docker 容器连接到 MySQL 数据库

无法从 docker 容器连接到数据库 [重复]

无法连接到 Docker 容器