簡體   English   中英

如何使用 mysql 在 docker 中配置和運行舊的 php 5.4 Web 應用程序?

[英]How to configure and run old php 5.4 web application in docker with mysql?

我有一個基於 php 5.4 和 mysql 的舊應用程序。 我在 2015 年開發了它。我想使用 docker 運行該應用程序,因為更改單個應用程序的 php 版本不是一個可行的解決方案。

我所做的如下:

文件

FROM php:5.4-apache

COPY 000-default.conf /etc/apache2/sites-available/000-default.conf

RUN a2enmod rewrite

COPY . /var/www/html/
RUN chown -R www-data:www-data /var/www/html

RUN docker-php-ext-install mysql

CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

docker-compose.yml

version: "3.7"
services:
  webapp:
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "8000:80"
    volumes:
      - .:/var/www/html

    # first load the 'db' service
    depends_on:
    - db
    links:
      - db

  db:
      image: mysql:5.7
      restart: always
      ports:
      - "13306:3306"
      environment:
        MYSQL_USER: root
        MYSQL_PASSWORD: admin
        MYSQL_ROOT_PASSWORD: admin
        MYSQL_DATABASE: pizzabite
      volumes:
      - ./mysql:/var/lib/mysql

這里的問題是我使用舊的 mysql 方法訪問 mysql,即 mysql_connect() 等。

數據庫.php

<?php
// Connecting to the database server
$servername = "localhost:13306";
$username = "root";
$password = "admin";
$port = "13306";
$dbname = "pizzabite";


$connect = mysql_connect($servername, $username, $password) or die("<br/>Check your server connection...");

//  $connect = mysqli_connect($servername, $username, $password, $dbname,$port); // I do not want to use mysqli_* function

$selectedDB = mysql_select_db($dbname) or die(mysqli_error());
//include('date.php');
?>
    

使用include()到處都包含此文件,但是當使用 docker 運行時,此文件會出現錯誤:

Warning: mysql_connect(): No such file or directory in /var/www/html/database.php on line 10

Check your server connection...

使用0.0.0.0:13306 時,它給了我這個錯誤:

Warning: mysql_connect(): Connection refused in /var/www/html/database.php on line 10

Check your server connection...

docker-compose ps命令輸出:

      Name                       Command               State                 Ports               
---------------------------------------------------------------------------------------------------
pizza_corner_db_1       docker-entrypoint.sh mysqld      Up      0.0.0.0:13306->3306/tcp, 33060/tcp
pizza_corner_webapp_1   /usr/sbin/apachectl -D FOR ...   Up      0.0.0.0:8000->80/tcp 

您正在嘗試連接到localhost:13306 ,因為您的 PC 端口13306已轉發到 mysql 容器。

但是,該代碼是從php-apache容器執行的,因此 'localhost' 是容器,而不是您的 pc。 那里沒有可用的端口13306

您應該連接到db:13306因為在您的 docker-compose 中,數據庫容器稱為db

另外,請務必在您的 php 容器中啟用 mysql:

RUN docker-php-ext-install mysql && docker-php-ext-enable mysql

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM