Не могу подключиться к базе данных с помощью docker-compose с помощью mysql и php 7

У меня проблемы с подключением к моему связанному контейнеру mysql из моего контейнера php 7.0.1-apache.

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 неправильно настроен в моем контейнере PHP. Какие-либо предложения?

4

Решение

Да, как вы сказали, ваша установка не включает расширение 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, не так ли? 🙂

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]