Docker Compose phpmyadmin未连接到MySQL

时间:2019-04-09 21:47:53

标签: mysql docker phpmyadmin docker-compose

我有一个docker compose文件,该文件基本上是试图构建WAMP / LAMP风格的环境。

基本上,PHPMyAdmin似乎无法连接到MySQL。在这里查看答案,看来这是使用MySQL Image 8进行的传统身份验证的问题,因此我添加了:

  command: --default-authentication-plugin=mysql_native_password

但是那没有用,所以我下降到mysql image5.7并且问题仍然存在。由于某些原因,我无法连接到MySQL,并且收到错误消息:

mysqli_real_connect(): php_network_getaddresses: getaddrinfo failed: Try again

mysqli_real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Try again

这是我的Docker Compose的副本,我认为这并不奇怪。

希望有人可以为我澄清一下。

version: "3.1"
services:

    site: 
      build: .
      ports :
        - "80:80"
      volumes:
        - ./www:/var/www/html/
      links:
        - database
      networks:
        - php-network

#######################################
# PHP MY ADMIN
#######################################
    phpmyadmin:
      build:
        context: .
        dockerfile: PHPMYADMIN.Dockerfile
      restart: always
      links:
        - database:mysql
      environment:
        PMA_HOST: mysql
        PMA_PORT: 3306
      ports:
        - "8080:80"
      environment:
        - MYSQL_USERNAME=admin
        - MYSQL_PASSWORD=root
      networks:
        - php-network

#######################################
# MySQL server
#######################################
    database:
      image: mysql:5.7.25
      ports:
        - "3306:3306"
      container_name: db-mysql 
      restart: always 
      environment:
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_DATABASE=test_db
        - MYSQL_USER=admin
        - MYSQL_PASSWORD=root
      networks:
        - php-network

networks:
  php-network:
    driver: bridge

我还看到有人提到过“ depends on”标志,我也曾尝试过,但也未能使我连接。我一直都遇到相同的错误。

3 个答案:

答案 0 :(得分:0)

根据您的phpmyadmin服务配置,您正在尝试通过mysql地址访问mysql容器:

environment:
  PMA_HOST: mysql
  PMA_PORT: 3306

但是可以通过databasedb-mysql地址访问带有mysql服务器的容器。

因此,您需要将phpmyadmin服务配置更改为:

environment:
  PMA_HOST: database
  PMA_PORT: 3306

答案 1 :(得分:0)

关于容器名称。

database:
     image: mysql:5.7.25
     ports:
       - "3306:3306"
       - **container_name: db-mysql**

and in your phpcontainer:

 phpmyadmin:
      build:
        context: .
        dockerfile: PHPMYADMIN.Dockerfile
      restart: always
      links:
        - database:mysql
      environment:
        **PMA_HOST: mysql**
        PMA_PORT: 3306

you define host as mysql, which in docker network will be unrecognizable.
try switching PMA_HOST to db-mysql.

很抱歉格式化错误。

还可以使用docker ps查看docker容器名称并确定您需要连接哪些主机。

答案 2 :(得分:0)

我现在可以通过以下方式进行这项工作:

version: "3.1"
services:
    www:
        build: .
        ports: 
            - "8081:80"
        volumes:
            - ./www:/var/www/html/
        links:
            - db
        networks:
            - default

#######################################
# MySQL server
#######################################
    db:
        image: mysql:5.7.25
        ports: 
            - "3306:3306"
        environment:
            MYSQL_DATABASE: test_db
            MYSQL_ROOT_PASSWORD: test
        volumes:
            - ./dump:/docker-entrypoint-initdb.d
            - persistent:/var/lib/mysql
        networks:
            - default

#######################################
# PHP MY ADMIN
#######################################
    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        links: 
            - db:db
        ports:
            - 8080:80
        environment:
            MYSQL_USER: user
            MYSQL_PASSWORD: test
            MYSQL_ROOT_PASSWORD: test
volumes:
    persistent: