docker-compose.yml岁时,我可以运行应用程序.现在我们想将应用程序转移到生产环境中,但不想使用容器数据库.那么,有什么方法可以让我使用docker-compose将本地MySQL数据库与应用程序连接起来呢?

我的docker .yml看起来像:

version: '3'
services:
  web-app:
    build:
      context: .
      dockerfile: web-app/Dockerfile
    ports:
      - 8080:8080
    links:
      - app-db

  app-db:
    build:
      context: .
      dockerfile: app-db/Dockerfile

    environment:
    - MYSQL_ROOT_PASSWORD=password
    - MYSQL_DATABASE=Optimize
    ports:
      - 3306:3306

而不是app-db部分,我只想连接到我的本地托管mysql数据库.

推荐答案

在docker网络中查找主机ip.如果使用docker compose.yml version: "3"很可能IP是:172.18.0.1but confirm it搜索容器(主机)的"网关":

docker inspect <container-id-or-name> | grep Gateway
"Gateway": "",
            "IPv6Gateway": "",
            "Gateway": "172.18.0.1",
            "IPv6Gateway": "",

因此,在docker应用程序中,指向MySQL,如下所示:172.18.0.1:3306(可能在配置文件中).考虑到只要docker网络保持不变,该IP是固定的(该网络是由docker compose创建的,除非您这样做,否则不会删除该网络)

另外,判断MySQL是否正在监听其所有接口.在my.cnf搜索bind-address中,应该是0.0.0.0(如果服务器有公共IP,请考虑安全问题).


作为替代方案,您可以将与主机相同的网络带到容器中,以便共享本地主机,因此容器将在那里找到mysql.将网络模式用作"主机":

version: '3'
services:
  web-app:
    build:
      context: .
      dockerfile: web-app/Dockerfile
    ports:
       - 8080:8080
    network_mode: "host"

然后,将hibernate.properties指向mysql,如下所示:localhost:3306

Mysql相关问答推荐

基于多行从表中 Select

MySQL滑动窗口动态间隔?

DJANGO 使用原始 MYSQL 查询计算记录数并在 html 模板中使用结果

使用不同的 where 列进行子 Select

为什么Mysql会根据查询参数改变查询执行计划?

Group By 查询运行速度太慢而无法正常运行

拆分列值并适当地返回拆分值

如何让连续 3 周或以上的用户有订单?

组平SQL查询结果

为什么一个 10 位的电话号码不能存储在长度为 10 的整数中?

是否可以从 .SQL 文件中计算表中的行数?

将每组的总和除以总数

授予用户对 MySQL 中有限数量表的访问权限

Spring Boot:Jdbc javax.net.ssl.SSLException:在接收对等方的 close_notify 之前关闭入站

#1146 - 表 'phpmyadmin.pma_recent' 不存在

由于在 MySQL 中使用保留字作为表名或列名导致的语法错误

我可以在单个 Amazon RDS 实例上创建多少个数据库

将 Blob 转换为字节数组的最简单方法

phpMyAdmin - 无法连接 - 无效设置 - 自从我添加了 root 密码 - 被锁定

MySql 两个时间戳之间的天数差异?