php_network_getaddresses:purolink_mysql_server 的 getaddrinfo 失败:名称或服务未知

问题描述 投票:0回答:1

我正在尝试使用

laravel
容器化我的应用程序
docker
。为此,我有一个 Dockerfile

FROM php:8.1-fpm

RUN set -eux; \
    apt-get update; \
    apt-get upgrade -y; \
    apt-get install -y --no-install-recommends \
            curl \
            libmemcached-dev \
            libz-dev \
            libpq-dev \
            libjpeg-dev \
            libpng-dev \
            libfreetype6-dev \
            libssl-dev \
            libwebp-dev \
            libxpm-dev \
            libmcrypt-dev \
            libonig-dev; \
    rm -rf /var/lib/apt/lists/*

RUN set -eux; \
    # Install the PHP pdo_mysql extention
    docker-php-ext-install pdo_mysql; \
    # Install the PHP pdo_pgsql extention
    docker-php-ext-install pdo_pgsql; \
    # Install the PHP gd library
    docker-php-ext-configure gd \
            --prefix=/usr \
            --with-jpeg \
            --with-webp \
            --with-xpm \
            --with-freetype; \
    docker-php-ext-install gd; \
    php -r 'var_dump(gd_info());'

docker-compose.yml

version: "3.7"
services:
  app:
    build:
      args:
        user: root
        uid: 1000
      context: ./
      dockerfile: Dockerfile
    image: purolink_local
    container_name: purolink_local_container
    restart: unless-stopped
    working_dir: /var/www/
    volumes:
      - ./:/var/www
    networks:
      - purolink_local_nets
  # DB SERVER
  mysql:
    image: mysql:latest
    container_name: purolink_mysql_server
    ports:
      - 3306:3306
    expose:
      - "3306"
    cap_add:
      - SYS_NICE # CAP_SYS_NICE
    volumes:
      - dbdata:/var/lib/mysql  # Map MySQL data directory into the container
    env_file:
      - .env
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_USER: toor
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
    restart: unless-stopped
    networks:
      - purolink_local_nets

  # PHPMYADMIN
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: pma
    links:
      - mysql
    environment:
      PMA_HOST: 127.0.0.1
      PMA_PORT: 3306
      PMA_ARBITRARY: 1
      UPLOAD_LIMIT: 100000000
    restart: always
    ports:
      - 8081:80
    networks:
      - purolink_local_nets
  #NGINX SERVER
  nginx:
    image: nginx:alpine
    #        platform: linux/arm64/v8
    container_name: purolink_local
    restart: unless-stopped
    tty: true
    ports:
        - "8000:80"
    volumes:
        - ./:/var/www
        - ./nginx/conf.d/:/etc/nginx/conf.d/
    networks:
      - purolink_local_nets
  #Redis Service
  redis:
      image: redis:latest
      #        platform: linux/arm64/v8
      container_name: purolink_redis
      command: redis-server --appendonly yes --requirepass "${REDIS_PASSWORD}"
      ports:
          - "6380:6379"
  #Queue Service
  queue:
      build:
          context: .
          args:
              - APP_ENV=${APP_ENV}
      environment:
          - APP_ENV=${APP_ENV}
          - CONTAINER_ROLE=queue
      container_name: purolink_local_queue
      working_dir: /var/www
      volumes:
          - ./:/var/www
#Docker Networks
networks:
  purolink_local_nets:
    name: purolink_local_nets
    driver: bridge
#Volumes
volumes:
    dbdata:
        driver: local

但是当我尝试访问我的应用程序上的部分时,返回

500 error
并在日志中,我收到任何带有以下文本的消息:

PDOException: PDO::__construct(): php_network_getaddresses: getaddrinfo for purolink_mysql_server failed: Name or service not known

这很奇怪,因为它运行其他部分,但在日志中出现此消息。

在我的

.env
中,我有:

DB_CONNECTION=mysql
DB_HOST=purolink_mysql_server
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=user
DB_PASSWORD=pass

我可以在我的应用程序中登录,我可以显示许多带有数据的部分,但具体来说,一个部分,返回错误 500 并显示此消息。

在我的环境中

PRE
PRO
一切都好,我认为我的docker有错误。

任何人都可以帮助我吗?

抱歉我的英语不好

php laravel docker docker-machine
1个回答
0
投票

您的

DB_HOST
环境应该是
mysql
,服务的名称,而不是容器名称

© www.soinside.com 2019 - 2024. All rights reserved.