【问题标题】:Can't connect to database with docker-compose with mysql and php 7无法使用 docker-compose 与 mysql 和 php 7 连接到数据库
【发布时间】:2015-12-24 00:36:25
【问题描述】:

我在从我的 php 7.0.1-apache 容器连接到链接的 mysql 容器时遇到问题。

PHP 容器 Dockerfile:

FROM php:7.0.1-apache

# Initialize html and php.ini
COPY src/ /var/www/html/
COPY config/php.ini /usr/local/etc/php/

# Update modules.
RUN apt-get update

docker-compose.yml:

web:
  build: .
  ports:
   - "80:80"
  links:
   - "db"
  volumes:
   - "./src/:/var/www/html/"

db:
  image: "mysql"
  ports:
   - "3306:3306"
  environment:
   - "MYSQL_ROOT_PASSWORD=somepword"

index.php:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "somepword";
$db = "test_db";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";

错误日志:

PHP Fatal error:  Uncaught Error: Class 'mysqli' not found in /var/www/html/index.php:8\nStack trace:\n#0 {main}\n  thrown in /var/www/html/index.php on line 8

我不确定我哪里出错了,基本上我的 PHP 容器中似乎没有正确配置 mysql。有什么建议吗?

【问题讨论】:

    标签: php mysql docker docker-compose


    【解决方案1】:

    是的,正如您所说,您的设置不包括您需要手动安装的 Mysqli 扩展。

    像这样将 MySQLi 的安装添加到您的 Dockerfile 中,您应该会很好:

    FROM php:7.0.1-apache
    
    RUN apt-get update && apt-get install -y mysql-client libmysqlclient-dev \ 
          && docker-php-ext-install mysqli
        # Initialize html and php.ini
    COPY src/ /var/www/html/
    COPY config/php.ini /usr/local/etc/php/
    

    最后也失去了 apt-get 更新。如果有什么你可能想运行apt-get update &amp;&amp; apt-get upgrade 来实际更新模块。不过老实说,你不应该这样做。这将导致您的 Dockerfile 在几周内无法生成相同的构建,仅仅是因为依赖项发生了变化,这违背了 Docker 的观点,不是吗? :)

    【讨论】:

    • 谢谢 -- 但是如果我不首先包含 apt-get 更新,那么它就找不到包: E: 无法找到包 mysql-client E: 无法找到包 libmysqlclient -dev
    • 是的,抱歉,这部分措辞有点混乱。我想说的是,您可能不应该在 Dockerfile 的末尾运行裸机 apt-get update。但当然,如果你想安装一些东西,你很可能需要事先对大多数基础镜像进行 apt-get update。
    • 它现在正在寻找连接,但我得到这个“连接失败:连接被拒绝”——我的 index.php 中是否有任何看起来不正确的内容?
    • Jup 数据库主机不是 127.0.0.1,您没有在这两个容器之间使用共享网络接口。尝试在 php 中设置 db 而不是 127.0.0.1
    猜你喜欢
    • 1970-01-01
    • 2017-11-18
    • 2018-12-21
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多