gpt4 book ai didi

php - 无法通过 PHP 连接到 docker mysql

转载 作者:IT老高 更新时间:2023-10-28 21:22:46 24 4
gpt4 key购买 nike

我有一个带有两个容器的 docker-compose 设置:一个是 php/apache 服务,另一个容器是数据库 (mysql)。

这是我的 docker-compose.yml

version: '2'
services:
app:
depends_on:
- db
links:
- db:mysql
build: .
image: app
ports:
- "80:80"
restart: always
links:
- db:db
volumes:
- ../:/var/www/html/

db:
image: mysql:latest
restart: unless-stopped
volumes:
- ./db_data:/var/lib/mysql
- ./databaseDumps:/tmp/databaseDumps
environment:
MYSQL_USER: "myApp"
MYSQL_PASSWORD: "root"
MYSQL_ROOT_PASSWORD: "root"
MYSQL_DATABASE: "myAppDatabase"
MYSQL_ROOT_HOST: "%"

这是我的应用程序 Dockerfile:

FROM php:7-apache

COPY prefilled_files/000-default.conf /etc/apache2/sites-available/000-default.conf
RUN apt-get -qq update
RUN apt-get -qq -y install libpng-dev curl git nano vim zip unzip mysql-client libmysqlclient-dev
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get install -y nodejs
RUN npm install -g bower
RUN npm install -g gulp
RUN docker-php-ext-install pdo pdo_mysql gd mysqli
EXPOSE 8080 80

主要问题是,mysql数据库和app容器运行良好,我可以通过app容器连接mysql数据库

$root@app: mysql -h db -u myApp -p

但是

如果我尝试在我的 symfony 项目上执行 composer install,则会出现以下错误消息:

 [Doctrine\DBAL\Driver\PDOException]        
SQLSTATE[HY000] [2002] Connection refused



[PDOException]
SQLSTATE[HY000] [2002] Connection refused

这是我的应用程序的参数:

parameters:
database_driver: pdo_mysql
database_host: db
database_port: 3306
database_name: myAppDatabase
database_user: myApp
database_password: root

为什么会这样?我已经阅读了几个论坛和网站,但没有任何帮助。我尝试了以下解决方案,但没有任何帮助:

  • 清除 symfony 缓存 ;)
  • 在 mysql 容器上暴露 3306
  • 将应用程序和 mysql 容器链接在一起
  • 从我的计算机中删除所有图像和容器并重新安装所有内容
  • 我在 Windows 和 ubuntu 17.04 上进行了尝试。相同的行为

connecting to a docker-compose mysql container denies access but docker running same image does not

docker-compose wordpress mysql connection refused

更新:

我尝试使用 https://gist.github.com/chales/11359952 中的一个小 php 脚本访问我的数据库. PHP/My Script 可以实际连接到数据库,所以问题必须出在我的 composer install 或学说或我的 symfony 配置中。

tl;dr

  • 2 Docker 容器通过 docker compose
  • 我可以通过应用容器上的 mysql 命令访问数据库,但不能通过 composer install。为什么?

最佳答案

我认为这是它试图通过主机名“db”查找容器的方式,我发现在运行 docker 的机器上,它似乎没有获取 guest 容器的名称(可能是您可以更改一些 DNS 配置),但我解决它的方法是找到 MySQL 容器的 IP 地址。我有 docker_db_1 作为 MySQL 的容器名称,所以我运行(假设 *nix)

docker inspect docker_db_1 | grep IPAddress

就我而言,这给了我

    "SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.18.0.2",

我使用这个 IP 地址 (172.18.0.2) 来连接而不是 db。

关于php - 无法通过 PHP 连接到 docker mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44869062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com