Maison > Questions et réponses > le corps du texte
Chers développeurs, J'ai résolu le problème d'origine, mais si quelqu'un a une image Docker capable de l'exécuter, je lui en serais très reconnaissant. J'ai besoin d'aide avec une très ancienne application.
Je mets en place un environnement de machine virtuelle pour une ancienne application. Si vous envisagez d'aider, veuillez lire attentivement.
J'ai une ancienne application qui est sur le point d'être supprimée car nous effectuons une réécriture, mais l'ancienne application a encore besoin de support et elle exécute une très ancienne version de PHP et MYSQL. Le code ci-dessous devrait tester si la connexion à la base de données fonctionne correctement.
require_once("/var/www/html/class/autoload.php"); $database = $_ENV['DB_HOST']; $DBuser = $_ENV["MYSQL_USER"]; $DBpass = $_ENV["MYSQL_USER"]; $link = mysql_connect($database, $DBuser, $DBpass, null); if (!$link) { echo "Error: Unable to connect to MySQL." . PHP_EOL; echo "Debugging errno: " . mysql_error() . PHP_EOL; exit; }
Le code s'est trompé et m'a donné le message d'erreur suivant :
Warning: mysql_connect(): No such file or directory in /var/www/html/docker_build/test_db.php on line 10 Error: Unable to connect to MySQL. Debugging errno: No such file or directory
Si j'utilise mysqli_connect
dans le même bloc de code, tout fonctionne bien, mais le projet utilise mysql_functions. L'application fonctionne correctement sur les serveurs de transfert et de production, j'ai essayé de copier les paramètres sur ma machine virtuelle et c'était le fichier docker qui fonctionnait, mais certaines mises à jour de sécurité récentes l'ont empêché de fonctionner.
version: "3" services: webserver: build: context: ${DOCKER_BUILD_ROOT}/bin/${DOCKER_PHPVERSION} container_name: ${DOCKER_PHPVERSION} restart: 'always' ports: - "${HOST_MACHINE_UNSECURE_HOST_PORT}:80" - "${HOST_MACHINE_SECURE_HOST_PORT}:443" links: - database volumes: - ${DOCUMENT_ROOT-.}:/var/www/html - ${PHP_INI-./docker_build/config/php/php.ini}:/usr/local/etc/php/php.ini - ${VHOSTS_DIR-./docker_build/config/vhosts}:/etc/apache2/sites-enabled - ${APACHE_LOG_DIR-./docker_build/logs/apache2}:/var/log/apache2 # user: "1000:1000" user: root database: build: context: "${DOCKER_BUILD_ROOT}/bin/${DOCKER_DATABASE}" container_name: 'database' restart: 'always' ports: - "${DOCKER_LOCALHOST}:${HOST_MACHINE_MYSQL_PORT}:3306" volumes: - ${MYSQL_CONF_FILE-./docker_build/config/mysql/mysql.conf.d/mysqld.cnf}:/etc/mysql/mysql.conf.d/mysqld.cnf - ${MYSQL_DATA_DIR-./docker_build/data/mysql}:/var/lib/mysql - ${MYSQL_LOG_DIR-./docker_build/logs/mysql}:/var/log/mysql - ${MYSQL_INIT_DIR-./docker_build/config/mysql/ini}:/docker-entrypoint-initdb.d environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} phpmyadmin: image: phpmyadmin/phpmyadmin container_name: 'phpmyadmin' links: - database environment: PMA_HOST: database PMA_PORT: 3306 PMA_USER: ${MYSQL_USER} PMA_PASSWORD: ${MYSQL_PASSWORD} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} ports: - '8080:80' volumes: - /sessions - ${PHP_INI-./docker_build/config/php/php.ini}:/usr/local/etc/php/conf.d/php-phpmyadmin.ini redis: container_name: 'redis' image: redis:latest ports: - "${DOCKER_LOCALHOST}:${HOST_MACHINE_REDIS_PORT}:6380"
FROM php:5.6-apache RUN apt-get -y update && apt-get upgrade -y # Install tools && libraries RUN apt-get -y install --fix-missing apt-utils nano wget dialog \ build-essential git curl libcurl3 libcurl3-dev zip \ libmcrypt-dev libsqlite3-dev libsqlite3-0 mysql-client \ zlib1g-dev libicu-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev \ && rm -rf /var/lib/apt/lists/* # Composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer # PHP5 Extensions RUN docker-php-ext-install curl \ && docker-php-ext-install tokenizer \ && docker-php-ext-install json \ && docker-php-ext-install mcrypt \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install pdo_sqlite \ && docker-php-ext-install mysql \ && docker-php-ext-install mysqli \ && docker-php-ext-install zip \ && docker-php-ext-install -j$(nproc) intl \ && docker-php-ext-install mbstring \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && pecl install xdebug-2.5.5 && docker-php-ext-enable xdebug # Enable apache modules RUN a2enmod rewrite headers RUN apt-get update && apt-get install -y \ mediainfo \ jhead \ imagemagick \ ffmpeg RUN usermod -u 1000 www-data EXPOSE 80 # initialize server script. designed to be run after volumes are mounted. # runs composer install and runs apache2 foreground. # ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] ENTRYPOINT ["./docker_build/config/server_ini.sh"]
J'ai juste besoin de le faire fonctionner. Ce serait parfait si cela pouvait être fait en utilisant Docker, mais je pense que cette image est obsolète. Toute aide est grandement appréciée. Je peux vous fournir les paramètres env et .ini. Je ne veux pas trop entrer dans la question.
J'ai tout essayé, regardé .ini et .env et tous les paramètres Linux. Il semble que le socket mysql ne soit pas configuré correctement, mais la connexion en ligne de commande mysql -uroot -p
fonctionne bien.
P粉6931261152024-01-17 10:21:43
La question a fini par être une faute de frappe. J'ai dû mettre à jour le mien .env
文件,将DB_HOST="localhost:3306"
改为DB_HOST="127.0.0.1:3306"
et puis ça a fonctionné. J'espère que cela aide quelqu'un.