将 VPS 上 drupal 网站迁移到 docker,导入数据库后网站打不开.求大家指导

2020-01-19 17:13:20 +08:00
 programV2
以下是我的操作步骤: (请 V 友们帮我看看怎么排查问题, 弄了两天了还是搞不定, 谢谢

1.在 VPS 上的运行 Docker 环境,配置(php7.2+mysql5.7+ngninx1.12)环境, docker compose 好后上传一个全新的 drupal8 安装包安装测试,安装过程中没有出现异常提示, 说明环境搭建正常。
2. 安装时设置网站和数据库信息,将本地所有文件和目录按原结构上传到 docker 相应容器挂载目录,mysql 将备份数据库文件导入;
3. 修改 /sites/default/settings.php 文件中的数据库用户名、数据库表、数据库密码。

谢谢大家, 祝大家春节快乐!
2287 次点击
所在节点    程序员
52 条回复
programV2
2020-11-09 21:34:18 +08:00
@merryfreespace V 友,您好, 请问能推荐一个适合英文站的 drupal 主题吗? 谢谢!
programV2
2020-11-10 22:21:11 +08:00
@sleepm v 友你好,不好意思来挖老贴。 我在同一个 mysql 容器创建了两个数据库(第一个数据库是用 docker-compose.yml 创建, 第二个 dB 是后面手动登录 MySQL 容器手动创建的, 为什么第一个网站成功运行, 第二个却数据库连接出错, 但是我确认用户名密码信息都是正确的, 数据库 host 跟第一个 database 也是一样的。 请问我怎么样排查?我连的是跟前一个 DB 相同的 host. 这是报错日志 , 谢谢指点🙏🙏🙏 2020/11/09 10:57:29 [error] 6#6: *72 FastCGI sent in stderr: "PHP message: PDOException: SQLSTATE[HY000] [1044] Access denied for user 'drupal'@'%' to database 'abc' in /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php on line 79 #0 /var/www/html/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php(149): PDO->__construct('mysql:host=drup...', 'drupal', '123456789', Array) #1 /var/www/html/core/lib/Drupal/Core/Database/Database.php(376): Drupal\Core\Database\Driver\mysql\Connection::open(Array) #2 /var/www/html/core/lib/Drupal/Core/Database/Database.php(166): Drupal\Core\Database\Database::openConnection('default', 'default') #3 [internal function]: Drupal\Core\Database\Database::getConnection('default') #4 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(79): call_user_func_array('Drupal\Core\Dat...', Array) #5 /var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal\Component\DependencyInjection\PhpArrayContainer->createService(Array, 'database') #6 /var/ww" while reading response header from upstream, client: 104.160.45.251, server: www.abc.com, request: "GET /user/login HTTP/1.1", upstream: "fastcgi://172.18.0.2:9000", host: "www.abc.com"
sleepm
2020-11-25 16:22:13 +08:00
哪里不懂搜哪里。。
在 phpmyadmin 检查用户 drupal 的权限,允不允许任意主机链接,也就是%,看样子是不允许,要不然报错可能是找不到主机 drupal
programV2
2020-11-25 22:41:37 +08:00
@sleepm 谢谢大佬的指点🙏🙏 我自己也 google 搜索了非常多的资料 确实没有头绪才上来打扰,默认情况下 docker 会为容器分配随机(某种......) IP 地址,请问您知道如何通过使用链接,将条目添加到容器的 hosts 文件中吗?并使用其 IP 地址映射另一个容器的名称。 这样就不需要知道其 IP 地址,只需使用其名称即可通过网络访问同一宿主机下面的其他容器。
sleepm
2020-11-26 08:02:27 +08:00
不知道。。docker 不是添加的,是自动解析的
programV2
2020-11-26 11:01:35 +08:00
@sleepm 谢谢大佬回复。🙏 但是我看文档上介绍说默认 bridge 只能通过 IP 互连的限制,只有用户自定义创建的 bridge 才能自动提供容器间的 DNS 解析功能,容器间才可以通过容器名进行通信。 难道现在默认的 bridge 也提供自动 DNS 解析了吗?
sleepm
2020-11-26 11:23:35 +08:00
你把我问倒了。。
应该是有的,因为容器间用 link 也是解析的
programV2
2020-12-02 11:00:24 +08:00
@sleepm 谢谢大佬! 多次测试发现只有自定义创建的 bridge 才有 dns 解析. 另外想请问您是如何让 docker daemon 守护进程不退出的? 突然收到服务监控通知, 发现 docker 上 4 个容器服务同时挂掉了, journalctl -u docker.service 进入日志查看发现了这个, 该如何排错呢? 另外想请教您现在都在用哪种方法让 docker daemon 守护进程不退出? 谢谢您的指点!

Docker version 18.09.7, build 2d0083d
linux 版本: 4.15.0-123-generic #126~16.04.1-Ubuntu SMP

systemd[1]: Stopping Docker Application Container Engine...

074627-05:00" level=info msg="Processing signal 'terminated'"

049975-05:00" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"

444047-05:00" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"

699341-05:00" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"

441246-05:00" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"

204594-05:00" level=info msg="stopping event stream following graceful shutdown" error="<nil>" module=libcontainerd namespace=moby

664254-05:00" level=info msg="stopping event stream following graceful shutdown" error="context canceled" module=libcontainerd namespace=plugins.moby

systemd[1]: Stopped Docker Application Container Engine.
sleepm
2020-12-02 19:14:50 +08:00
不是大佬。。我都是照着官网文档加密钥,apt 安装的。。
看你的日志看着没啥问题。。你排查下内存是不是不够,或者硬盘是不是占满了
programV2
2020-12-19 15:19:03 +08:00
@sleepm 谢谢您🙏 解決了是 docker 的问题。V 友,还有一事困扰我很久想请教你,我宿主机是创建一个普通用户 user1 ( uid 83 )来安装部署容器,目前 nginx 容器和 php 容器的共享卷 web 挂载目录用 755 权限,他们 uid 是 user1 的 83,请问这样设置有文件权限问题?是否需要将 nginx 容器和 php 容器内服务的启动用户改为 user1 uid 83?
programV2
2020-12-19 15:23:32 +08:00
@programV2 补充 nginx 容器和 php 容器内服务的启动用户 分别为 nginx 及 Drupal,uid 各不相同
@sleepm
sleepm
2020-12-21 13:56:27 +08:00
容器能正常启动就不用管容器外的权限问题,
如果 drupal 或者 nginx 报权限错误,那就只需要在容器内改权限

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/639219

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX