【问题标题】:docker-compose drupal mysql SQLSTATE[HY000] [2002] No such file or directorydocker-compose drupal mysql SQLSTATE[HY000] [2002] 没有这样的文件或目录
【发布时间】:2020-04-01 17:53:17
【问题描述】:

我已经尝试了所有表单上可用的所有解决方案,但即使尝试使用接受的答案 docker-compose 文件也没有成功,但仍然遇到相同的错误。

我正在 VirtualBox 上新安装的 ubuntu 18 上尝试这个。我已经尝试了 localhost、127.0.0.1、更改用户等所有可能的组合。

Docker version 19.03.6, build 369ce74a3c
docker-compose version 1.25.4, build 8d51620a

docker-compose.yaml

version: '3.1'
services:
  drupal:
    image: drupal:8
    container_name: drupal_container
    environment:
     DRUPAL_PROFILE: standard
     DRUPAL_SITE_NAME: Drupal
     DRUPAL_USER: user
     DRUPAL_PASS: pass
     DRUPAL_DBURL: mysql://user:pass@database:3306/db
    #or mysql://user:pass@mysql_container:3306/db tried with both
    links:  
     - "mysql:mysql"
    depends_on:
     - mysql
    ports:
     - 80:80
    restart: always
    volumes:
     - /var/www/html/modules
     - /var/www/html/profiles
     - /var/www/html/themes
     - /var/www/html/sites
    restart: always
  mysql:
    image: mysql:5.7
    container_name: mysql_container
    restart: always
    environment:
     MYSQL_ROOT_PASSWORD: root
     MYSQL_DATABASE: db
     MYSQL_USER: user
     MYSQL_PASSWORD: pass
    ports:
     - 3306:3306
    expose:
     - 3306

我可以通过命令行和 docker exec 命令连接 MySQL

sudo mysql --protocol=TCP -h127.0.0.1 -p3306 -uroot -proot
sudo mysql --protocol=TCP -h127.0.0.1 -p3306 -uuser -ppass
sudo mysql --protocol=TCP -hlocalhost -p3306 -uroot -proot
sudo mysql --protocol=TCP -hlocalhost -p3306 -uuser -ppass
docker-compose exec mysql mysql -uroot -proot -e "Show databases;"
docker-compose exec mysql mysql -uuser -ppass -e "Show databases;"

我该如何解决这个问题?

【问题讨论】:

    标签: mysql docker drupal docker-compose


    【解决方案1】:

    它奏效了,不是我预期的那样,但确实奏效了。

    sudo docker inspect mysql_container
    

    操作->

    "Gateway": "172.22.0.1",
    "IPAddress": "172.22.0.2",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "02:42:ac:16:00:02",
    "DriverOpts": null
    

    我尝试使用此 IP 添加即 "IPAddress": "172.22.0.2" drupal 及以下命令可以连接

    sudo mysql --protocol=TCP -h172.22.0.2 -p3306 -uroot -proot
    sudo mysql --protocol=TCP -h172.22.0.2 -p3306 -uuser -ppass
    

    但仍然想知道这个 IP 地址的意义是什么,它与 localhost127.0.0.1 有什么不同,并且每次我在不同的机器上提取相同的图像时它会保持不变还是它会改变? ?

    【讨论】:

      【解决方案2】:

      我已经附上了工作的撰写文件,您似乎缺少应该连接码头工人的网络。

      为您的容器创建共享网络

      docker network create shared
      
      version: '3.1'
      networks:
        shared: 
          external:
            name: shared
      services:
        drupal:
          image: drupal:8
          container_name: drupal_container
          environment:
           DRUPAL_PROFILE: standard
           DRUPAL_SITE_NAME: Drupal
           DRUPAL_USER: user
           DRUPAL_PASS: pass
           DRUPAL_DBURL: mysql://user:pass@mysql:3306/db    # MySQL host should be same as service name created for mysql.
          #or mysql://user:pass@mysql_container:3306/db tried with both
          links:  
           - "mysql:mysql"
          depends_on:
           - mysql
          ports:
           - 80:80
          restart: always
          volumes:
           - /var/www/html/modules
           - /var/www/html/profiles
           - /var/www/html/themes
           - /var/www/html/sites
          networks:
            - shared
        mysql:
          image: mysql:5.7
          container_name: mysql_container
          restart: always
          environment:
           MYSQL_ROOT_PASSWORD: root
           MYSQL_DATABASE: db
           MYSQL_USER: user
           MYSQL_PASSWORD: pass
          ports:
           - 3306:3306
          expose:
           - 3306
          networks:
            - shared
      

      当您尝试在 drupal 中设置数据库时,请使用以下主机值,其余值应与您一直使用的相同。

      主机:mysql

      此外,您可以只更改撰写文件中的“DRUPAL_DBURL”值。这样您就可以使用 docker compose 创建的默认网络。

      DRUPAL_DBURL: mysql://user:pass@mysql:3306/db
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-07
        相关资源
        最近更新 更多