可以从docker容器外部连接到数据库,但不能从内部连接(在laravel中)

由于投了反对票,我重构了这个问题。


就像这样简单:


外部Docker容器:


➜  backoffice git:(master) ✗ php artisan tinker

Psy Shell v0.9.9 (PHP 7.2.15 — cli) by Justin Hileman

>>> $ur = app(MDiPaolo\Repositories\UserRepository::class)

=> App\Infrastructure\Repositories\Doctrine\UserDoctrineRepository {#3159}

>>> $u = new MDiPaolo\Entities\User

=> MDiPaolo\Entities\User {#3295}

>>> $u->setEmail('one_email@gmail.com')

=> MDiPaolo\Entities\User {#3295}

>>> $u->setPassword(password_hash('1234', PASSWORD_BCRYPT))

=> null

>>> $ur->save($u)

=> null

>>>

在docker容器内部:


➜  backoffice git:(master) ✗ docker exec -it backoffice_web_1 bash

root@042969f0229c:/var/www/html# php artisan tinker

Psy Shell v0.9.9 (PHP 7.2.17 — cli) by Justin Hileman

>>> $ur = app(MDiPaolo\Repositories\UserRepository::class)

Doctrine/DBAL/Exception/ConnectionException with message 'An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused'

>>>

我有种感觉,它与docker系统有关,例如两个容器之间的通信或我如何构建它们。


这是我的Dockerfile。


FROM php:7.2-apache


RUN docker-php-ext-install pdo_mysql && docker-php-ext-enable pdo_mysql

RUN apt-get update && apt-get install nano && mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"


RUN a2enmod rewrite

RUN service apache2 restart


ENV APACHE_DOCUMENT_ROOT=/var/www/html/public

RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf

RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

docker-compose文件:


version: '3.1'


services:

    web:

        build: .

        ports:

            - "8080:80"

        links:

            - mysql

        depends_on:

            - mysql

        volumes:

            - ./:/var/www/html

    mysql:

        image: mysql:5.7.25

        ports:

            - "3306:3306"

        environment:

            MYSQL_ROOT_PASSWORD: backoffice


慕容3067478
浏览 370回答 1
1回答

holdtom

好的,我找到了解决方案。在我的情况下,.env文件中的DB_HOST字段必须等于docker-compose.yml文件中mysql容器的名称mysql。DB_CONNECTION=mysqlDB_HOST=mysqlDB_PORT=3306DB_DATABASE=dashboardDB_USERNAME=rootDB_PASSWORD=backoffice问题是现在我无法从外部访问它,但是您当然可以一直去:127.0.0.1    mysql在你的hosts档案
打开App,查看更多内容
随时随地看视频慕课网APP