PHP应用程序无法连接到127.0.0.1的docker mysql容器

2024-03-12

Mysql 位于它自己的 docker-compose.yml 中,因为我想要一个 mysql 服务器启动并运行,任何其他 php 应用程序都可以连接到。所以我在同一个 docker-compose.yml 中没有 php 和 mysql。如果我通过查找 mysql 容器的网关 IP 地址,然后将其硬编码到 php 应用程序中,则可以从 php 应用程序连接到 mysql。docker inspect mysql-db。但是每次 mysql 重新启动时,docker 都会更改 172...ip 地址,因此这对于开发来说并不理想。

我可以通过连接到mysqlmysql -h 127.0.0.1没问题,但是从 php 应用程序中,如果我尝试使用 127.0.0.1,我会收到连接被拒绝的消息。我只能使用 172... 网关 IP 地址进行连接。

如何让 mysql 容器监听从主机到 127.0.0.1 的连接?

mysql 的 docker-compose.yml

version: "3"

services:
  mysql:
    container_name: mysql-db
    image: mysql
    build:
      dockerfile: Dockerfile
      context: ./server/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=admin
    volumes:
      - ./data/mysql:/var/lib/mysql
    ports:
      - 3306:3306

用于 php 的 docker-compose.yml

version: "3"

services:
  nginx:
    container_name: nginx_myapp
    image: nginx
    build:
      dockerfile: Dockerfile
      context: ./server/nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./app:/var/www/html
    networks:
      - myapp
  php:
    container_name: php_myapp
    image: php:7.3-fpm
    build:
      dockerfile: Dockerfile
      context: ./server/php-fpm
    environment:
      CI_ENV: development
    volumes:
      - ./app:/var/www/html
    networks:
      - myapp

networks:
  myapp:

127.0.0.1 是环回地址。它指向本地主机。在 docker 上下文中,localhost 就是容器本身。您的 php 容器上没有运行数据库,因此连接永远不会成功。

您需要做的是在 mysql 撰写文件中配置默认​​网络,以便您可以预测地控制其名称以方便以后使用(否则它将根据您的撰写项目名称计算,如果您重命名包含的文件夹,该名称可能会更改... ):

重要的提示:要使下面的工作正常,您需要使用撰写文件版本 >= 3.5

---
version: '3.7'
#...
networks:
  default:
    name: shared_mysql

你现在可以使用它shared_mysql网络作为external来自任何其他 compose 项目。

version: '3.7'

services:
  nginx:
    #...
    networks:
      - myapp
  php:
    #...
    networks:
      - myapp
      - database

networks:
  myapp:
  database:
    external: true
    name: shared_mysql

然后你可以从你的数据库连接到mysqlphp使用服务名称的容器mysql (e.g. mysql -h mysql -u user -p)

参考:https://docs.docker.com/compose/networking/ https://docs.docker.com/compose/networking/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP应用程序无法连接到127.0.0.1的docker mysql容器 的相关文章

  • Doctrine 1 和 Symfony 1 的多个主键?

    我已经知道在 Symfony 1 和 Doctrine 1 中不可能使用多个主键 但是你们知道有什么好的解决方法吗 除了多对多关系之外 原则 1 不适用于多列上的主键 但如果你想使用多对多关系 请像这样使用 BlogPost columns
  • 无法在 .net core 2 中从 MySQL 构建“日期”类型列

    我已经开始了一个新的 net core 2 项目 我正在尝试将 MySQL 数据库导入实体框架 我使用此命令来搭建数据库 Scaffold DbContext server localhost port 3306 user id user
  • 如何在 Smarty 中打印 json

    我从 api 获取 json 如何使用 Smarty 打印 json Json格式 first name jinu last name mk loginid email protected cdn cgi l email protectio
  • 具有 blobfuse 或 Azure 存储 Blob 的 Azure 容器实例

    我正在从 azure 容器注册表 azure cli 和 或门户 部署到 azure 容器实例 Azure blobfuse 在 ubuntu 18 上 出现以下错误 未找到设备 请先尝试 modprobe fusion 解决这个问题的方法
  • MySQL Python 关于重复键更新值

    我正在研究使用 python 将 JSON 数据上传到 MySQL 我需要在插入语句中包含 ON DUPLICATE KEY UPDATE VALUES 但在 Python 中遇到了问题 如果我运行以下代码 一切正常 import json
  • 使用 Docker 文件分配附加功能

    我需要部署 Docker 映像 但我只想使用 Docker run 命令而不使用其任何参数 我想在运行容器时分配特殊权限 这是我的 Docker 运行命令 docker run cap add SYS ADMIN cap add DAC R
  • 重新排列数组键 php [重复]

    这个问题在这里已经有答案了 我有这个数组 Array 15 gt 13 1 16 gt Mark one answer 19 gt You see a car on the hard shoulder of a motorway with
  • 如何在 Twitter Card 中传递动态图像路径?

    我在用
  • 猪的组连接等效吗?

    试图在 Pig 上完成这个任务 寻找 MySQL 的 group concat 等效项 例如 在我的表中 我有以下内容 3fields userid clickcount pagenumber 155 2 12 155 3 133 155
  • CSS 无法从带有 php“includes”的相对路径工作

    文件夹结构 index php includes header html css style css 我的主项目文件夹中有 2 个子文件夹 一个是名为 includes 的文件夹 另一个名为 css 我有我的 index php主文件夹中的
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • 从 Grib 天气模型中提取数据

    我已经下载了grib1模型数据来自GFS http en wikipedia org wiki Global Forecast System 我使用的是 Mac OS X 并且能够构建wgrib2文件来自NOAA http en wikip
  • 从镜像创建 Docker 容器而不启动它

    作为我的部署策略的一部分 我使用 Upstart 管理 Docker 容器 为此 我需要从注册表中提取图像并创建一个命名容器 如建议的那样 用于运行容器的新贵脚本不会管理生命周期 https stackoverflow com questi
  • 日期时间与时间戳字段

    我是 MySQL 数据库的新手 您是否建议在表创建中使用日期时间或时间戳字段以及原因 我正在使用 MySQL 5 7 和 innodb 引擎 Thanks 我会用TIMESTAMP对于任何需要自动管理的事情 因为它支持诸如ON UPDATE
  • 如何确保在 PHP 的“foreach”循环中重置该值?

    我正在写一个简单的 PHP 页面和一些foreach使用了循环 以下是脚本 arrs array a b c foreach arrs as arr if substr arr 0 1 b echo This is b End of fir
  • 无法在 mysql-apt-config [Ubuntu 14.04] 中选择“确定”

    我使用的是 Ubuntu 14 04 sudo apt get update总是给我这个选项来配置 mysql apt config 我尝试选择版本 按 tab gt 在 确定 上突出显示的键 按 Enter 但没有任何反应 它再次返回并突
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • PHP 中的多个插入查询[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个 php html 表单 它将结果插入到狗展数据库中 问题是 无论我做什么 我都会收到此错误 查询失败 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 INSE
  • Doctrine DQL 从 join 返回平面数组

    我通过 DQL 中的常规 LEFT JOIN 选择 3 个实体 它们通过连接表关联 连接表还定义了实体以及带注释的关系 查询执行没有问题 但我的结果作为平面数组返回 我期望一个包含三个实体作为每个索引的数组元素的数组 SELECT e1 e
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver

随机推荐

  • 如何使用包名来区分grails中的类?

    可以使用包名称来区分 grails 中的类吗 例如com business appName DomainClass 和 com business appName foo DomainClass 我认为这会导致问题 因为 grails 需要唯
  • 将我的自定义函数应用于数据框 python

    我有一个数据框 其中有一列称为 信号 我想向该数据框添加一个新列并应用我构建的自定义函数 我对此很陌生 在将我从数据框列中获取的值传递到函数中时 我似乎遇到了麻烦 因此任何有关我的语法错误或推理的帮助将不胜感激 Signal 3 98 3
  • 在CSS中生成对角线(条纹)

    我想知道是否可以在 css 或 svg 中生成对角线来覆盖 div 从而允许 div 的背景颜色显示出来 像下面这样的东西 如果有人有一个例子会很有帮助 你可以试试 HTML div class deg45 stripes TEST div
  • 在 PHP 中使用 session_name() - 无法访问数据

    当我使用时 session name fObj session start SESSION foo bar 随后加载页面并运行 session start print r SESSION 不返回会话数据 如果我删除 session name
  • 是否有办法在 google play 上检查设备兼容性而无需上传

    将 Android 应用程序上传到市场时 Google Play 根据您的应用程序清单设置确定兼容设备列表 例如 使用许可 使用功能 uses sdk 支持屏幕 到目前为止 我发现我必须调整我的清单 以便只有在将我的应用程序上传到 Goog
  • Android 开发人员:TimerTask 和手机睡眠可能有些奇怪?

    我已经编写了我的第二个 Android 应用程序 该应用程序根据特定的时间表 仅截至目前的日期和时间 切换音频配置文件 如果我通过 eclipse 使用模拟器运行代码 代码可以正常工作 但是我最近导出了 apk 并将其安装在我的 At t
  • 无法加速像素修改的 BufferedImages

    很长一段时间 1 2个月 我一直在试图找到这个特定问题的答案 我无法让我的图像硬件加速 我一直在网上搜索 创建了自己的方法 用键盘敲击我的头 仍然感到疼痛 但没有成功 尽管我讨厌 Java SDK 以外的库 但我尝试了 LWJGL 和 JO
  • Pandas 通过 groupby 分组到列表列表

    给定一个结构如下的数据框 rule id ordering sequence id 1 0 12 1 1 13 1 1 14 2 0 1 2 1 2 2 2 12 我需要将其转换为 rule id sequences 1 12 13 14
  • 如何检测VBA excel是否发现了什么?

    我在宏中使用它来查找工作表中的内容 Selection Find What email After ActiveCell LookIn xlFormulas LookAt xlPart SearchOrder xlByRows Search
  • 使用opencv进行虹膜检测

    如何用opencv检测人脸上的虹膜 看看这个论坛主题 http social msdn microsoft com Forums en winformsdesigner thread 56a938de e065 4e61 b513 4104
  • 在 WPF 中使用 EF Code First 和 SqlCe

    我正在尝试将 EF Code First 与我的 WPF 应用程序一起使用 其想法是在 AppData MyApp 中创建一个 SqlCe Db 如果没有 并将其与 EF Code First 一起使用 目前 当我尝试从它应该创建的数据库中
  • 我如何使用 zend Framework 1.11 中的表单在复选框中设置数据库中的数据

    我有一个表名称是task master 我想在 zend 中动态地将所有记录设置到复选框中 我看到了很多例子 但没有找到任何解决办法 监工 id name br 1 Index br 2 Add br 3 Edit br 4 delete
  • 控制 Linux 嵌入式应用程序的启动屏幕

    在嵌入式编程中 通常需要用一些自定义的 加载 动画或从开机到启动并运行的启动屏幕来替换默认的 Linux 启动输出 达到这个目的的方法是什么 有没有办法在整个启动序列中使用相同的 进程 如何解决这个问题 我猜我们需要一个自制内核来实现这一点
  • 将 virtualenv 从 3.5.3 降级到 2.7

    我的 virtualenv 当前配置为 python 3 5 0 而我需要使用的包仅支持 2 7 我需要一种在 virtualenv 中将 python 运行时降级到 2 7 的方法 我确实有两个版本可供使用 第一个是在我的 virtual
  • Windows 批处理脚本中的文件/文件夹选择器对话框

    在运行时才知道输入文件位置的情况下 使用 GUI 进行文件选择输入可以减少用户出错的可能性 有没有办法从 Windows 批处理脚本调用文件 文件夹选择器对话框 文件浏览器 2016 3 20更新 由于 PowerShell 是当今所有现代
  • OM\Db::query(string $statement) 的声明必须与 PDO::query 兼容

    我刚刚安装了 PHP 8 却出现此错误 我如何解决它 致命错误 OM Db query string statement 的声明必须与 home www includes 中的 PDO query string query int fetc
  • 使用 INDIRECT 函数的条件格式对于布尔 AND 或 OR 或包含公式的单元格失败

    我有以下函数来检查列是否L包含 完成 一词 我使用INDIRECT能够使用条件格式为整行着色 INDIRECT l ROW completed 这个功能有效 但是 我需要扩展它 我也想使用基于额外单元格的条件格式 所以我尝试了以下方法 AN
  • 使 vba 代码适用于所有盒子

    您好 所以我想做的是使此代码适用于所有复选框的 1 50 我希望代码仅影响单击的框 Private Sub CheckBox1 Click If MsgBox Do you want to lock this box vbYesNo War
  • xamarin UI 测试 - 无法加载我指向的本机 APK 路径

    我想通过使用以下代码引用 APK 的路径来在本机 android APK 上运行 REPL UI 测试 public void BeforeEachTest app ConfigureApp Android ApkFile C app de
  • PHP应用程序无法连接到127.0.0.1的docker mysql容器

    Mysql 位于它自己的 docker compose yml 中 因为我想要一个 mysql 服务器启动并运行 任何其他 php 应用程序都可以连接到 所以我在同一个 docker compose yml 中没有 php 和 mysql