后端容器 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的主要内容,如果未能解决你的问题,请参考以下文章