我在vm中安装了Ubuntu 16.04,我正在尝试在docker容器中运行应用程序并将其连接到主机上的MySQL数据库
我在主机上安装了MysqL:
当我尝试将我的应用程序连接到MysqL时,我得到了以下信息:
java.sql.exception: cannot create poolableConnectionFactory ( Could not create connection to database server. Attempted reconnect 3 times
我使用docker-compose执行我的应用程序:
version: '2'
services:
exo:
image: exoplatform/exo-community:5.0
environment:
EXO_DB_TYPE: MysqL
EXO_DB_NAME: user
EXO_DB_USER: root
EXO_DB_PASSWORD: "my-pass"
EXO_DB_HOST: "127.0.0.1"
EXO_ADDONS_LIST: exo-jdbc-driver-MysqL
expose:
- "8080"
- "3306"
ports:
- "8080:8080"
volumes:
- exo_data:/srv/exo
- exo_logs:/var/log/exo
volumes:
exo_data:
external:
name: exo_data
exo_logs:
external:
name: exo_logs
networks:
default:
driver: bridge
如您所见,我尝试连接到MysqL默认端口…而且我刚刚看到3306端口正在侦听主机.
在my.cnf中,我具有绑定地址0.0.0.0.
MysqL正在运行:
root@xxx/# MysqLadmin -u root -p status
Uptime: 4784 Threads: 4 Questions: 17 Slow queries: 0 Opens: 114 Flush tables: 1 Open tables: 33 Queries per second avg: 0.003
我在桥上使用docker,所以我想只需要在docker composer上添加端口即可连接docker和主机.但是似乎没有任何效果.有人可以指出我正确的方向吗?
解决方法:
问题是您正在尝试使用本地主机从容器连接到主机.这将不起作用,因为容器具有自己的ip,而localhost将命中容器而不是主机.
从容器到主机的连接是关于stackoverflow的一个非常常见的问题,您可以在From inside of a Docker container, how do I connect to the localhost of the machine?中找到许多答案
最简单的方法(尽管不推荐)是使用docker-compose文件中的network_mode:host.在这种情况下,容器将与主机共享网络,而localhost也将访问主机.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。