我在 Mac 上使用 Docker Desktop。
我通过 docker-compose 启动了我的 MariaDB 数据库容器:
version: '3'
volumes:
data:
services:
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- data:/var/lib/mysql
ports:
- "3306:3306"
然后,我通过
docker-compose up -d
旋转它。 db
容器运行良好。
在我的本地机器上(在本地 Docker 环境之外),我想访问这个
db
容器,我想知道我是否可以使用 localhost
访问运行在 Docker 容器内的数据库。
所以,我通过我的 spring boot 应用程序验证了它,它直接在我的本地机器上运行,而不是在容器中,我将数据源定义为
DATASOURCE_URL=jdbc:mariadb://localhost:3306/mydb
我的本地应用程序能够建立连接。但这让我感到困惑,行为不应该是只有同一个docker网络中的容器才能通过
db
访问localhost
容器吗?有人可以为我详细说明和解释吗?
仔细查看您的 docker-compose 文件。您提到了以下端口字段。
ports:
- "3306:3306" => "HOST_MACHINE_PORT:CONTAINER_PORT"
这意味着您将容器端口 3306 暴露给主机端口 3306(这是您的 mac)。所以,这就是为什么你可以通过
localhost
访问它。