簡體   English   中英

Docker 無法連接到運行 docker-compose up 的 MySQL

[英]Docker can't connect to MySQL running docker-compose up

我正在使用這個 Docker 配置: https : //github.com/romaricp/kit-starter-symfony-4-docker

我使用以下方法啟動環境:

docker-compose 構建

其次是:

docker-compose up -d

一切正常,但 MySQL 服務出現問題。 我收到一個 Symfony 錯誤:

“驅動程序發生異常:找不到驅動程序”

以及當我嘗試登錄數據庫時的 PMA 錯誤:

mysqli_real_connect(): php_network_getaddresses: getaddrinfo 失敗: 名稱無法解析

知道我怎么能讓它工作嗎?

docker-compose.yml:

version: '3'
services:
apache:
    build: .docker/apache
    container_name: sf4_apache
    ports:
      - 80:80
    volumes:
      - .docker/config/vhosts:/etc/apache2/sites-enabled
      - .:/home/wwwroot/sf4
    depends_on:
      - php

mysql:
    image: mysql
    container_name: sf4_mysql
    volumes:
        - .docker/data/db:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: sf4
        MYSQL_USER: sf4
        MYSQL_PASSWORD: sf4

php:
    build: .docker/php
    container_name: sf4_php
    volumes:
      - .:/home/wwwroot/sf4
    environment:
      - maildev_host=sf4_maildev
    depends_on:
      - maildev
      - mysql

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: sf4_phpmyadmin
    ports:
        - 8080:80
    links:
        - mysql

maildev:
    image: djfarrelly/maildev
    container_name: sf4_maildev
    ports:
      - 8001:80

我也打開了 mysql 日志,我看到了這個:

2019-04-07T12:00:30.943414Z 0 [系統] [MY-010931] [服務器] /usr/sbin/mysqld:准備好連接。 版本:'8.0.15' 套接字:'/var/run/mysqld/mysqld.sock' 端口:3306 MySQL 社區服務器 - GPL。

也許端口錯誤,這就是我無法連接的原因?

我認為您在鏈接容器時遇到了問題。 我建議您使用自定義網絡而不是鏈接。 所有容器都可以看到彼此

對於phpmyadmin服務,我認為您應該像這樣設置PMA_HOSTPMA_PORT環境變量:

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: sf4_phpmyadmin
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
    ports:
        - 8080:80
    links:
        - mysql

你的 mysql 容器應該在開始時有command指令來設置身份驗證插件(mysql 8 的連接器有問題),更多細節在這里

mysql:
    image: mysql
    container_name: sf4_mysql
    command: "--default-authentication-plugin=mysql_native_password"
    volumes:
        - .docker/data/db:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: sf4
        MYSQL_USER: sf4
        MYSQL_PASSWORD: sf4

在你的 Symfony 應用程序中,連接字符串位於.env文件中,它應該具有以下格式:

DATABASE_URL=mysql:// mysql_user : mysql_user_password @ mysql_host : mysql_port / db_name

mysql_user :您的 mysql 用戶(例如:root)

mysql_user_password :用戶的密碼(例如:root)

mysql_host :應包含位於docker-compose.yml文件中的 mysql 容器服務名稱(本例中為 mysql)

mysql_port : mysql 容器內部端口(本例中為 3306)

db_name :要連接的數據庫。

DATABASE_URL 可以是這樣的:

DATABASE_URL=mysql://root:root@mysql:3306/sf4

在這些更改后停止您的容器並再次啟動它們。

希望這會有所幫助。

您必須公開mysql端口3306:

  mysql:
    image: mysql
    container_name: sf4_mysql
    volumes:
    - .docker/data/db:/var/lib/mysql
    restart: always
    ports:
    - "3306:3306"
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: sf4
        MYSQL_USER: sf4
        MYSQL_PASSWORD: sf4
    networks:
    - default

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM