Phabricator无法在Docker化的PHP容器中找到Docker化的MySQL。

3
我正在尝试将phabricator作为docker镜像启动。问题在于,当我访问phabricator/webroot时,phabricator返回一个“无法找到MySQL!”页面。当我尝试指定mysql.host、mysql.port、mysql.user和mysql.pass参数时,它似乎仍然失败。
编辑:我正在macOS“Sierra”上使用docker-machine进行尝试。
我通过分离三个组件来完成这个过程:
1. nginx镜像 2. php-fpm镜像 3. mysql镜像
nginx镜像和php-fpm镜像通过相同的卷共享数据。具体而言,我将所需的phabricator文件(phabricator、liphutil、arcanist)存储在data/目录中。我的docker项目结构如下:
docker-project/
    - docker-compose.yml
    - php_setup.conf
    + data/
        + phabricator/
        + arcanist/
        + liphutil/
    + nginx/
        - Dockerfile
    + php-fpm/
        - Dockerfile

php_setup.conf是Phabricator PHP项目所需的Nginx配置文件,会被复制到Nginx容器中。

docker-compose.yml

version: "2"
services:
  web:
    build:
      context: .
      dockerfile: nginx/Dockerfile
    ports:
      - "80:80"
    volumes:
      - ./data:/srv
  php:
    build:
      context: .
      dockerfile: php-fpm/Dockerfile
    volumes:
      - ./data:/srv
  mysql:
    image: mysql
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
      - MYSQL_USER=phabricator
      - MYSQL_PASSWORD=12345

我能够从php-fpm镜像中telnet mysql 3306主机,因此它显然是可用的。但是,我不确定这个问题是否出现是因为我将phabricator项目存储在主机卷中,而不是容器本身中。
我希望有人能指导我正确的方向。 phabricator请求提供的日志错误:
无法建立到任何数据库主机的连接(尝试“phabricator_config”)。所有主服务器和副本都完全无法访问。 data/phabricator/conf/local/local.json
{
  "mysql.port": "3306",
  "mysql.pass": "12345",
  "mysql.user": "phabricator",
  "mysql.host": "mysql"
}

这些容器的启动顺序是什么?您可以尝试为您的php服务使用 depends_on: mysql 吗? - Metaphox
请粘贴您的Phabricator配置。 - Tarun Lalwani
@TarunLalwani 我猜你指的是提供配置的 local.json 文件(我已将其添加在上面)。"phabricator_config" 是传递到 phabricator 代码中的 addPhabricatorConfig(...) 的变量。它会导致对 mysql.host 等的引用。 - Puzzled
也许配置根本没有被加载?另外,尝试使用你提供的凭据连接 mysql 客户端 cli,以确保数据库连接正常。 - Tarun Lalwani
@TarunLalwani 非常感谢您的建议。虽然我能够连接到mysql服务器,但是发现用户“phabricator”的权限受到了限制。在给予“phabricator”全局权限后,Phabricator应用程序得以连接。不过这个错误信息真是有点误导人啊 :/ - Puzzled
显示剩余2条评论
1个回答

1
尽管错误信息显示phabricator无法连接/找到MySQL,但事实证明授予phabricator用户的权限过于限制。
解决方案:授予phabricator用户全局权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接