Ach*_*kon 5 php mysql wordpress bash docker
我在实时服务器上有一个 Wordpress 站点,我想使用 Docker 在本地创建一个 LAMP 堆栈来测试内容。
我拉取php:7.0-apache和的图像,mysql:5.7直播中的相同版本。
我创建了一个 MySQL 容器:
docker run -d --name achi-mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
Run Code Online (Sandbox Code Playgroud)
我创建了一个 php 和 apache 容器并将其与 MySQL 链接:
docker run -d --name achi-php-apache --link achi-mysql:mysql -p 8080:80 -v /home/achi/workspace/web/wordpress-template/:/var/www/html php:7.0-apache
Run Code Online (Sandbox Code Playgroud)
我在 localhost:8080 上收到以下错误:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /var/www/html/wp-includes/wp-db.php:1564 [...]
我是否以错误的方式链接这两个容器?
您的问题不在于容器之间的连接。问题是您的 PHP / Apache 容器不支持mysqli(或PDO MySQL)。WordPress 找不到其他函数来连接 MySQL 数据库或 MySQL 容器。相反,WordPress默认使用已弃用和删除(自 PHP 7.0 起)的mysql_函数。您至少需要在mysqliPHP 容器上安装(如下所述)。
我还建议使用docker-compose文件通过一个命令安装和运行所有容器。
要创建您想要的容器,您可以使用以下docker-compose.yml文件:
version: "3"
services:
achi-php-apache:
build:
context: ./
container_name: achi-php-apache
ports:
- "8080:80"
volumes:
- /home/achi/workspace/web/wordpress-template:/var/www/html:rw
depends_on:
- achi-mysql
networks:
- wp-net
achi-mysql:
image: mysql:5.7
container_name: achi-mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wp-dbname
volumes:
- wp-mysql-data:/var/lib/mysql
networks:
- wp-net
networks:
wp-net:
driver: bridge
volumes:
wp-mysql-data:
Run Code Online (Sandbox Code Playgroud)
您需要在Dockerfile与docker-compose.yml文件相同的目录中包含以下内容:
FROM php:7.0-apache
RUN docker-php-ext-install -j$(nproc) mysqli
Run Code Online (Sandbox Code Playgroud)
这Dockerfile会安装缺少的mysqli扩展,以便 WordPress 可以使用它。
您还可以使用 PDO MySQL 代替mysqli. 在这种情况下,您可以使用以下 Dockerfile:
FROM php:7.0-apache
RUN docker-php-ext-install -j$(nproc) pdo
RUN docker-php-ext-install -j$(nproc) pdo_mysql
Run Code Online (Sandbox Code Playgroud)
现在您可以docker-compose up在文件所在的docker-compose.yml文件夹内执行命令。创建容器并运行后,您应该能够访问 WordPress 站点 ( <ip-or-hostname>:8080)。
在wp-config.php文件上,您需要使用以下常量:
define('DB_NAME', 'wp-dbname');
define('DB_USER', 'root');
define('DB_PASSWORD', '123456');
define('DB_HOST', 'achi-mysql');
Run Code Online (Sandbox Code Playgroud)
您也可以使用官方的 WordPress 镜像来安装 WordPress。在这种情况下,您可以使用以下docker-compose.yml文件:
version: "3"
services:
achi-php-apache:
image: wordpress:4.9.4-php7.0-apache
container_name: achi-php-apache
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: achi-mysql
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: 123456
WORDPRESS_DB_NAME: wp-dbname
volumes:
- /home/achi/workspace/web/wordpress-template:/var/www/html:rw
depends_on:
- achi-mysql
networks:
- wp-net
achi-mysql:
image: mysql:5.7
container_name: achi-mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: wp-dbname
volumes:
- wp-mysql-data:/var/lib/mysql
networks:
- wp-net
networks:
wp-net:
driver: bridge
volumes:
wp-mysql-data:
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6773 次 |
| 最近记录: |