如何将phpmyadmin添加到laravel 8 sail docker-compose.yml

How to add phpmyadmin to laravel 8 sail docker-compose.yml

我正在尝试将 phpmyadmin 添加到 laravel 8 docker-compose.yml 文件。

现在,我可以访问“http://localhost:8080”上的 phpmyadmin,但是用户没有得到 无法登录:

Cannot log in to the MySQL server

mysqli::real_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known

mysqli::real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known

我的 docker-compose.yml 文件如下所示:

# For more information: https://laravel.com/docs/sail
version: "3"
services:
  laravel.test:
    build:
      context: ./vendor/laravel/sail/runtimes/8.0
      dockerfile: Dockerfile
      args:
        WWWGROUP: "${WWWGROUP}"
    image: sail-8.0/app
    ports:
      - "${APP_PORT:-80}:80"
    environment:
      WWWUSER: "${WWWUSER}"
      LARAVEL_SAIL: 1
    volumes:
      - ".:/var/www/html"
    networks:
      - sail
    depends_on:
      - mysql
      # - pgsql
      - redis
      # - selenium
  # selenium:
  #     image: 'selenium/standalone-chrome'
  #     volumes:
  #         - '/dev/shm:/dev/shm'
  #     networks:
  #         - sail
  mysql:
    image: "mysql:8.0"
    ports:
      - "${FORWARD_DB_PORT:-3306}:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
      MYSQL_DATABASE: "${DB_DATABASE}"
      MYSQL_USER: "${DB_USERNAME}"
      MYSQL_PASSWORD: "${DB_PASSWORD}"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    volumes:
      - "sailmysql:/var/lib/mysql"
    networks:
      - sail
    healthcheck:
      test: ["CMD", "mysqladmin", "ping"]
  #    pgsql:
  #        image: postgres:13
  #        ports:
  #            - '${FORWARD_DB_PORT:-5432}:5432'
  #        environment:
  #            PGPASSWORD: '${DB_PASSWORD:-secret}'
  #            POSTGRES_DB: '${DB_DATABASE}'
  #            POSTGRES_USER: '${DB_USERNAME}'
  #            POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'
  #        volumes:
  #            - 'sailpostgresql:/var/lib/postgresql/data'
  #        networks:
  #            - sail
  redis:
    image: "redis:alpine"
    ports:
      - "${FORWARD_REDIS_PORT:-6379}:6379"
    volumes:
      - "sailredis:/data"
    networks:
      - sail
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
  # memcached:
  #     image: 'memcached:alpine'
  #     ports:
  #         - '11211:11211'
  #     networks:
  #         - sail
  mailhog:
    image: "mailhog/mailhog:latest"
    ports:
      - "${FORWARD_MAILHOG_PORT:-1025}:1025"
      - "${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025"
    networks:
      - sail

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
      - mysql:mysql
    ports:
      - 8080:80
    environment:
      MYSQL_USERNAME: "${DB_USERNAME}"
      MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
      PMA_HOST: mysql

networks:
  sail:
    driver: bridge
volumes:
  sailmysql:
    driver: local
  #    sailpostgresql:
  #        driver: local
  sailredis:
    driver: local

要让容器相互通信,它们必须在同一个 Docker 网络上。您已将 mysql 容器明确分配给 networks: [sail],但 phpmyadmin 容器不在该网络上。您可以添加

services:
  phpmyadmin:
    networks:
      - sail

Compose 还为您提供了一个名为 default 的网络(有关详细信息,请参阅 Networking in Compose)。如果您没有明确指定 networks: 服务,那么它将在 default 网络上。另一种解决方案是只删除文件中各处的所有 networks: 块,让每个容器都在 default 网络上。

links: 仅与过时形式的 Docker 网络一起使用,您也可以删除文件的那部分内容。