Как я могу заставить pdo работать на docker php: 7.4.5- apache на docker рабочем столе для windows - PullRequest
0 голосов
/ 10 июля 2020

ситуация Я начал эту неделю с настройки среды 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);

...