docker容器中的Laravel-可以迁移但不能迁移

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

所以我已经搜索了很多,每个人都说要么使.env文件中的数据库主机等于mysql,要么使docker容器ip都对我有用,但都对我不起作用?

我很确定这是一个主机问题,但目前不知道吗?

这是我的docker-compose.yml文件:

version: "2"
services:

  web:
    container_name: algm
    build:
      context: .
      dockerfile: container-build/web/Dockerfile
    environment:
    - MYSQL_DATABASE=dbname
    - MYSQL_USER=dbuser
    - MYSQL_PASSWORD=654321
    - MYSQL_HOST=db
    ports:
    - "8080:80"
    volumes:
    - .:/var/www
    depends_on:
    - db

  db:
    image: mysql:5.7
    ports:
    - "6603:3306"
    environment:
    - MYSQL_ROOT_PASSWORD=654321
    - MYSQL_USER=dbuser
    - MYSQL_PASSWORD=654321
    - MYSQL_DATABASE=dbname
    volumes:
    - "mysql_data:/var/lib/mysql"
    - ./data/schema.sql:/docker-entrypoint-initdb.d/schema.sql

volumes:
  mysql_data: { driver: local }

这是我在.env文件中的连接:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=dbuser
DB_PASSWORD=654321

所以我通过以下命令进入我的docker bash:

sudo docker-compose exec web /bin/bash

并且我可以进行模型和迁移,但不能迁移?我收到错误:

 Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (SQL: select * from information_schema.tables where table_schema = dbname and table_name = migrations and table_type = 'BASE TABLE')

  at /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:665
    661|         // If an exception occurs when attempting to run a query, we'll format the error
    662|         // message to include the bindings with SQL, which will make this exception a
    663|         // lot more helpful to the developer instead of just the database's errors.
    664|         catch (Exception $e) {
  > 665|             throw new QueryException(
    666|                 $query, $this->prepareBindings($bindings), $e
    667|             );
    668|         }
    669| 

  Exception trace:

  1   PDOException::("PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known")
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=mysql;port=3306;dbname=dbname", "dbuser", "654321", [])
      /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

更新,如果需要它,这是我的Dockerfile:

#
# Use this dockerfile to run the application.
#
# Start the server using docker-compose:
#
#   docker-compose build
#   docker-compose up
#
# NOTE: In future examples replace {{volume_name}} with your projects desired volume name
#
# You can install dependencies via the container:
#
#   docker-compose run {{volume_name}} composer install
#
# You can manipulate dev mode from the container:
#
#   docker-compose run {{volume_name}} composer development-enable
#   docker-compose run {{volume_name}} composer development-disable
#   docker-compose run {{volume_name}} composer development-status
#
# OR use plain old docker 
#
#   docker build -f Dockerfile-dev -t {{volume_name}} .
#   docker run -it -p "8080:80" -v $PWD:/var/www {{volume_name}}
#
FROM php:7.2-apache

RUN apt-get update \
 && apt-get install -y vim git zlib1g-dev mariadb-client libzip-dev \
 && docker-php-ext-install zip mysqli pdo_mysql \
 && pecl install xdebug \
 && docker-php-ext-enable xdebug \
 && echo 'xdebug.remote_enable=on' >> /usr/local/etc/php/conf.d/xdebug.ini \
 && echo 'xdebug.remote_host=host.docker.internal' >> /usr/local/etc/php/conf.d/xdebug.ini \
 && echo 'xdebug.remote_port=9000' >>  /usr/local/etc/php/conf.d/xdebug.ini \
 && a2enmod rewrite \
 && sed -i 's!/var/www/html!/var/www/public!g' /etc/apache2/sites-available/000-default.conf \
 && mv /var/www/html /var/www/public \
 && curl -sS https://getcomposer.org/installer \
  | php -- --install-dir=/usr/local/bin --filename=composer \
 && echo "AllowEncodedSlashes On" >> /etc/apache2/apache2.conf

WORKDIR /var/www
laravel docker
1个回答
1
投票

我已经尝试过您的配置,并且可以正常工作。您只需要将DB_HOST=mysql更改为您的容器名称DB_HOST=db

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=dbuser
DB_PASSWORD=654321

然后转到容器内的应用程序文件夹并运行php artisan config:clearphp artisan cache:clear,然后执行迁移。

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