我从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。有什么建议么?
最佳答案
是的,正如您所说,您的安装程序不包含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在几周内无法生成相同的版本,仅是因为依赖项已发生变化,这是对Docker观点的挑战,不是吗? :)