将Wordpress网站移至Docker:建立数据库连接时出错

时间:2018-09-05 13:17:06

标签: mysql wordpress docker docker-compose

我最近一直在使用Wordpress和Docker创建新站点,并对它的工作方式有一个合理的了解,我现在正寻求将一些已建立的站点移入Docker。

我一直在遵循本指南:

https://stephenafamo.com/blog/moving-wordpress-docker-container/

我已经进行了所有应有的设置,但是当我转到domain.com:1234时,收到错误消息“建立数据库连接时出错”。我已按照建议在wp-config.php中将“数据库主机”更改为“ mysql”,并且来自Im引入站点的所有数据库详细信息都是正确的。

我已经连接到mysql容器,并检查数据库是否在正确的用户那里,并且还通过mysql CLI确保pw正确。

SELinux设置为宽松,我没有更改任何目录/文件所有权或权限,对于后一个目录,所有755和文件644均应保留。

编辑:我应该提到数据库/数据及其下的所有内容似乎都由用户/组“ polkitd输入”而非root拥有。

当我浏览端口1234上的站点时,Docker日志并没有真正告诉我很多信息,除了WP容器的500条错误消息(尽管如此)。

这是docker-compose文件:

version: '2'

services:
  example_db:
    image: mysql:latest
    container_name: example_db
    volumes:
      - ./database/data:/var/lib/mysql
      - ./database/initdb.d:/docker-entrypoint-initdb.d
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password123 # any random string will do
      MYSQL_DATABASE: mydomin_db # the name of your mysql database
      MYSQL_USER: my domain_me # the name of the database user
      MYSQL_PASSWORD: password123 # the password of the mysql user

  example:
    depends_on:
      - example_db
    image: wordpress:php7.1 # we're using the image with php7.1
    container_name: example
    ports:
      - "1234:80"
    restart: always
    links:
      - example_db:mysql
    volumes:
      - ./src:/var/www/html

我非常欢迎我提出建议!

6 个答案:

答案 0 :(得分:2)

请查看以下撰写脚本。我尝试和测试。很好。

version: '2'

services:
  db:
    image: mysql:latest
    container_name: db_server
    volumes:
      - ./database/data:/var/lib/mysql
      - ./database/initdb.d:/docker-entrypoint-initdb.d
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password123 # any random string will do
      MYSQL_DATABASE: udb_test # the name of your mysql database
      MYSQL_USER: me_prname # the name of the database user
      MYSQL_PASSWORD: password123 # the password of the mysql user

  example:
    depends_on:
      - db
    image: wordpress:php7.1 # we're using the image with php7.1
    container_name: wp-web
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: me_prname
      WORDPRESS_DB_PASSWORD: password123
      WORDPRESS_DB_NAME: udb_test
    ports:
      - "1234:80"
    restart: always
    volumes:
      - ./src:/var/www/html

如果您遇到其他问题,请告诉我。

答案 1 :(得分:2)

使用新版本的docker-compose,它看起来像这样(如果您不想使用PhpMyAdmin,可以将其省略):

version: '3.7'

volumes:
  wp-data:
networks:
  wp-back:

services:

  db:
    image: mysql:5.7
    volumes:
      - wp-data:/var/lib/mysql
    environment:
       MYSQL_ROOT_PASSWORD: rootPassword
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wp-user
       MYSQL_PASSWORD: wp-pass
    ports:
      - 8889:3306
    networks:
      - wp-back

  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_HOST: db
      MYSQL_USER: wp-user
      MYSQL_PASSWORD: wp-pass
      MYSQL_ROOT_PASSWORD: rootPassword
    ports:
      - 3001:80
    networks:
      - wp-back

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - 8888:80
      - 443:443
    environment:
       WORDPRESS_DB_HOST: db
       WORDPRESS_DB_USER: wp-user
       WORDPRESS_DB_PASSWORD: wp-pass
    volumes:
      - ./wordpress-files:/var/www/html
    container_name: wordpress-site
    networks:
      - wp-back

数据库卷是名为wp-data的卷,而wordpress html是到当前目录./wordpress-files的绑定安装。

答案 2 :(得分:1)

如果您希望将其全部保存在一个容器中,可以在此处引用此存储库, https://github.com/akshayshikre/lamp-alpine/tree/development

这里使用的是灯高山图像 然后安装mysql,php,apache2(灯栈)并复制本地wordpress demosite和db进行演示

如果您不希望任何形式的持续集成部件,请忽略.circleci文件夹 检查docker-compose文件和Dockerfile,环境变量在.env文件中

答案 3 :(得分:1)

确保 wp-config.php 文件具有与 db_user 文件中为 db_passworddocker-composer yml 定义的凭据相同的凭据。我也有类似的问题,我删除了所有文件并重新安装,看到 docker-composer up -d 将启动所有内容,但 mysql 设置的 wp-config.php 文件内容未在 docker 中定义。所以我相应地改变了它并最终开始工作

答案 4 :(得分:0)

如果您遵循本教程,https://stephenafamo.com/blog/moving-wordpress-docker-container/,则您的网站将无法正常运行。 Coz它不还原数据库,您需要使用此命令手动还原initdb.d目录中存在的.sql转储文件。

cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u root --password=root DATABASE

我也陷入了困境,我的CSS无法正常工作。 有什么新主意请告诉我。

答案 5 :(得分:0)

我与您分享我的方法

显示运行版本,询问是否一切正常!

$ docker --version && docker-compose --version

运行Docker Copose文件

$ docker-compose -f docker-compose.yml up -d

等你快进后

显示正在运行的容器,并且Wordpress容器的名称正在侦听端口8000

 $ docker ps 

如果您已按照其网站上列出的步骤操作,则会在下表中看到WordPress容器的名称,如下所示 https://hub.docker.com/_/wordpress

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

xxxxxxxxxxxx        wordpress:latest    "docker-entrypoint.s…"   8 minutes ago       Up 8 minutes        0.0.0.0:8000->80/tcp   cms_wordpress_1

xxxxxxxxxxxx        mysql:5.7           "docker-entrypoint.s…"   8 minutes ago       Up 8 minutes        3306/tcp, 33060/tcp    cms_db_1

,如果您使用以下地址检查浏览器:localhost:8000 您将收到消息“建立数据库连接出错”

在Wordpress容器中启动bash

$ docker exec -it cms_wordpress_1 bash

由于没有连接,apt更新失败

$ apt update

打开新终端并显示当前的Firewalld配置

$ sudo cat /etc/firewalld/firewalld-workstation.conf | greb 'FirewallBackend'
currently set to 'nftables'

将值设置为“ iptables”

$ sudo sed -i 's/FirewallBackend=nftables/FirewallBackend=iptables/g' /etc/firewalld/firewalld-workstation.conf

确认新值

$ sudo cat /etc/firewalld/firewalld-workstation.conf | grep 'FirewallBackend'

重新启动Firwalld服务以应用更改

$ sudo systemctl restart firewalld.service

在浏览器中刷新正在运行的Wordpress会话,这很好。 做得好。