Java 无法使用Docker容器名称连接到MySQL,但可以连接到localhost
我无法使用连接字符串中的Docker容器名称连接到MySQL,但可以连接到localhost docker compose:Java 无法使用Docker容器名称连接到MySQL,但可以连接到localhost,java,mysql,spring-boot,docker,docker-compose,Java,Mysql,Spring Boot,Docker,Docker Compose,我无法使用连接字符串中的Docker容器名称连接到MySQL,但可以连接到localhost docker compose: mysql-docker-container: image: mysql:latest environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=test - MYSQL_PASSWORD=test ports: - 3306:3306
mysql-docker-container:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=test
- MYSQL_PASSWORD=test
ports:
- 3306:3306
volumes:
- /data/mysql
app:
image: app
build:
context: ./
dockerfile: Dockerfile
depends_on:
- mysql-docker-container
links:
- mysql-docker-container:mysql-docker-container
ports:
- 9090:9090
volumes:
- /data/p2c-app
environment:
- DATABASE_HOST=mysql-docker-container
- DATABASE_USER=testuser
- DATABASE_PASWORD=testuser
- DATABASE_NAME=test
- DATABASE_PORT=3306
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true
上面的作品,但我想与容器名称如下-我得到连接被拒绝
spring.datasource.url=jdbc:mysql://mysql-docker-container:3306/test?useSSL=false&allowPublicKeyRetrieval=true
我做错了什么?如果本地主机连接正常,您可以更新
/etc/hosts
127.0.0.1 localhost mysql-docker-container
要检查是否可以从应用程序容器访问mysql docker容器
,可以打开tty并ping
docker exec -it app_container_name bash
ping mysql-docker-container
一切正常。数据库服务似乎已启动,但mysql正在启动过程中。
然后应用程序服务启动,无法访问数据库 对于这种情况,有一些解决办法。
但最简单的一点是,您可以将下面的内容添加到应用程序服务中
restart: on-failure
请注意,
dependens_on
部分仅表示docker容器上下文中的内容,而不是底层服务中的内容。问题作者不想连接到localhost-他们的应用程序和数据库正确地位于不同的容器中。他们想从一个容器连接到另一个容器。我想他是想从spring boot frameworkspring.datasource.url
啊,抱歉-我明白你的意思-你是说他/她想从主机连接,而不是从容器连接。是的,这可以解释为什么localhost可以工作,以及为什么他们不需要更改它。(我已经对你的帖子做了澄清,如果不是你的意思,请重新编辑)。伙计们,我不想连接到localhost,而是从docker容器。这应该清楚地解释:jdbc:mysql://mysql-docker-container:3306/Are 您是否在容器中运行spring应用程序?当您“上述操作正常”时(参考mysql://localhost:3306
),你在哪里运行?这将在您的主机上运行,因为您已经发布了端口,但我假设您希望从应用程序
容器建立连接。