ситуация Я начал эту неделю с настройки среды docker для разработки php. После нескольких часов просмотра учебника я нашел примеры с Dockerfile и docker -compose.yml с правильными настройками.
Проблема единственная проблема, с которой я сейчас сталкиваюсь, это то, что я не могу заставить PDO работать в php. когда я запускаю свой файл конфигурации php, я получаю следующую ошибку:
Неустранимая ошибка: Uncaught PDOException: SQLSTATE [HY000] [2002] Нет такого файла или каталога в / var / www/html/item_storage/inc/conn.php on line 22 && PDOException: SQLSTATE [HY000] [2002] Нет такого файла или каталога в / var / www/html/item_storage/inc/conn.php в строке 22 * 1012 *
То, что я пробовал
- изменение версии php с 7.4.5 на 7.2
- изменение хоста в файле confil на «mysql» и «172.0.0.1»
- с использованием mysqli_connect, который кажется работает нормально.
файлов
Dockerfile
FROM php:7.4.5-apache
RUN apt-get update \
&& apt-get install -y \
&& docker-php-ext-install pdo pdo_mysql mysqli\
&& pecl install xdebug \
&& docker-php-ext-enable xdebug \
&& echo 'xdebug.remote_enable=on' >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo 'xdebug.remote_host=host.docker.internal' >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo 'xdebug.remote_port=9000' >> /usr/local/etc/php/conf.d/xdebug.ini \
docker -compose.yml
version: '3'
services:
mysql:
container_name: mysql
image: mysql:latest
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: local
MYSQL_DATABASE: item_storage
MYSQL_USER: normal
MYSQL_PASSWORD: local
MYSQL_HOST: mysql
ports:
- 6033:3306
networks:
- global-netwerk
volumes:
- ./mysql/datastorage:/var/lib/mysql
webserver:
build:
context: .
dockerfile: Dockerfile
container_name: php
restart: always
ports:
- "80:80"
volumes:
- "../01 Projecten:/var/www/html"
environment:
MYSQL_ROOT_PASSWORD: local
MYSQL_DATABASE: item_storage
MYSQL_USER: normal
MYSQL_PASSWORD: local
depends_on:
- mysql
networks:
- global-netwerk
networks:
global-netwerk:
driver: bridge
соед. php (файл конфигурации)
$host = 'localhost';
$user = 'root';
$password = 'local';
$dbname = 'item_storage';
$port = '6033';
// Set DSN
$dsn = 'mysql:host='. $host .';port='. $port.';dbname='. $dbname;
// Create a PDO instance
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);