簡體   English   中英

可以從 docker 容器外部連接到數據庫,但不能從內部連接到數據庫(在 laravel 中)

[英]Can connect to database from outside a docker container but not from inside (in laravel)

由於反對票,我重構了這個問題。

就這么簡單:

外部碼頭集裝箱:

➜  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
>>>

碼頭集裝箱內部:

➜  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

好的,我找到了解決方案。

在 .env 文件中, DB_HOST字段必須等於docker-compose.yml文件中 mysql 容器的名稱,在我的例子中是mysql

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=dashboard
DB_USERNAME=root
DB_PASSWORD=backoffice

問題是現在我無法從外部訪問它,但當然你可以隨時去:

127.0.0.1    mysql

在您的hosts文件中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM