用docker-compose和mysql和php 7无法连接数据库

我有问题从我的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 

泊坞窗,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 

我不知道我要去哪里错了,基本上它看起来像MySQL没有正确configuration在我的PHP容器。 有什么build议么?

是的,正如你所说的你的设置不包括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 && apt-get upgrade来实际更新模块。 老实说,你不应该这样做。 这将导致你的Dockerfile在几个星期内不能生成相同的版本,只是因为依赖关系已经改变了哪种types的藐视Docker的一部分是不是? 🙂