【问题标题】:phabricator cannot find dockerized mysql in dockerized php containerphabricator 在 dockerized php 容器中找不到 dockerized mysql
【发布时间】:2017-08-17 20:35:06
【问题描述】:

我正在尝试将 phabricator 作为 docker 映像启动。问题是当我访问 phabricator/webroot 时,phabricator 返回一个Cannot Find MySQL! 页面。当我尝试指定 mysql.hostmysql.portmysql.usermysql.pass 参数时,它似乎仍然失败。

编辑:我正在使用 docker-machine 在 macOS "Sierra" 上尝试这个。

我通过分离出三个组件来做到这一点:

  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”时)。所有的 master 和 replica 都完全无法访问。

data/phabricator/conf/local/local.json

{
  "mysql.port": "3306",
  "mysql.pass": "12345",
  "mysql.user": "phabricator",
  "mysql.host": "mysql"
}

【问题讨论】:

  • 这些容器的启动顺序是什么?您可以尝试depends_on: mysql 为您的 php 服务吗?
  • 粘贴您的 phabricator_config
  • @TarunLalwani 我假设您指的是为配置提供的local.json 文件(我在上面添加了它)。 “phabricator_config”是传递给 phabricator 代码中addPhabricatorConfig(...) 的变量。它导致对mysql.host等的引用......
  • @Metaphox 我忘了提到我已经尝试过明确启动顺序。不幸的是,depends_on 似乎不起作用。 :(
  • 可能是配置根本没有加载?还尝试使用您提供的凭据使用 mysql 客户端 cli 进行连接,以确保数据库连接正常

标签: mysql docker docker-compose phabricator


【解决方案1】:

尽管错误消息说 phabricator 无法连接/找到 MySQL,但事实证明授予phabricator 用户的权限过于严格。

解决方案:向 phabricator 用户授予全局权限。

【讨论】:

    猜你喜欢
    • 2018-04-03
    • 1970-01-01
    • 2020-11-16
    • 2018-10-20
    • 2018-06-10
    • 2016-09-10
    • 2019-11-05
    • 1970-01-01
    相关资源
    最近更新 更多