Docker MySQL问题SQLSTATE[HY000][2002]php_网络_getaddresses:getaddrinfo失败

Docker MySQL问题SQLSTATE[HY000][2002]php_网络_getaddresses:getaddrinfo失败,php,mysql,docker,docker-compose,Php,Mysql,Docker,Docker Compose,我想用PHP7.2.10-fpm、nginx和mysql 5.7建立一个小型docker环境,以便在其中运行Laravel 5.7。不幸的是,我在尝试从我的应用程序服务连接到mysql时(尝试运行docker composer exec app php artisan migrate)出现以下错误: 尝试运行docker compose exec应用程序mysql-u root-p返回: 错误2002(HY000):无法通过套接字“/var/run/mysqld/mysqld.sock”连接到本

我想用PHP7.2.10-fpm、nginx和mysql 5.7建立一个小型docker环境,以便在其中运行Laravel 5.7。不幸的是,我在尝试从我的应用程序服务连接到mysql时(尝试运行
docker composer exec app php artisan migrate
)出现以下错误:

尝试运行docker compose exec应用程序mysql-u root-p返回: 错误2002(HY000):无法通过套接字“/var/run/mysqld/mysqld.sock”连接到本地MySQL服务器(2“没有这样的文件或目录”)

通过
docker compose-up--build启动并构建我的容器不会抛出任何错误。它说mysql正在运行并等待连接。
我还通过
docker system prune--force--volumes
删除并重新创建了所有图像

也许我在我的docker-compose中遗漏了什么。yml

version: '3.3'
services:
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ./../backend:/var/www
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    working_dir: /var/www
    depends_on:
      - mysql
    volumes:
      - ./../backend:/var/www
    ports:
        - 8080:80
  mysql:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - "MYSQL_DATABASE=shop"
      - "MYSQL_USER=shop_u"
      - "MYSQL_PASSWORD=secret"
      - "MYSQL_ROOT_PASSWORD=secret"
    ports:
      - 33061:3306
    command: --disable-partition-engine-check
volumes:
  db_data:
App.dockerfile:

FROM php:7.2.10-fpm

RUN apt-get update
RUN apt-get install -y libmcrypt-dev
RUN apt-get install -y mysql-client
RUN apt-get install -y libmagickwand-dev --no-install-recommends
RUN pecl install imagick
RUN docker-php-ext-enable imagick
RUN docker-php-ext-install pdo_mysql
RUN pecl install mcrypt-1.0.1
RUN docker-php-ext-enable mcrypt
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php -r "if (hash_file('SHA384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
RUN apt-get install -y git
RUN apt-get update && apt-get install -y zlib1g-dev
RUN docker-php-ext-install zip
最后是来自Laravel的.env文件:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=shop
DB_USERNAME=shop_u
DB_PASSWORD=secret
更新
docker compose images
列出了以下容器:

+-----------------+-------------------+----------------+
|    Container    |    Repository     |    ImageID     |
+-----------------+-------------------+----------------+
| docker_app_1    |  docker_app       |   a94dba376130 |
| docker_mysql_1  |  docker_database  | 563a026a1511   |
| docker_web_1    |  docker_web       |   d9024ab40b73 |
+-----------------+-------------------+----------------+
docker exec-it docker\u app\u 1 bash运行
ping docker\u mysql\u 1
会导致
bash:ping:command not found


运行
ping docker\u mysql\u 1
docker exec-it docker\u web\u 1 bash
运行良好。

您可以使用其服务名称从php容器内部ping您的mysql容器吗?您可以告诉我如何从另一个容器中ping容器吗
docker compose exec app ping mysql\u 1
导致
OCI runtime exec failed:exec failed:container\u linux。go:348:启动容器进程导致“exec:\“ping\”:在$PATH中找不到可执行文件:未知
查找容器ID并使用docker exec-it容器ID bashI已更新我的帖子。从应用程序ping不起作用。从web ping工作正常。该错误似乎表明您的应用程序尝试连接到其本地主机(在应用程序容器内)上的MySQL数据库,而不是连接到MySQL数据库容器(使用容器名称)
+-----------------+-------------------+----------------+
|    Container    |    Repository     |    ImageID     |
+-----------------+-------------------+----------------+
| docker_app_1    |  docker_app       |   a94dba376130 |
| docker_mysql_1  |  docker_database  | 563a026a1511   |
| docker_web_1    |  docker_web       |   d9024ab40b73 |
+-----------------+-------------------+----------------+