为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕容3067478 2021-05-07 05:09:25
由于投了反对票,我重构了这个问题。就像这样简单:外部Docker容器:➜  backoffice git:(master) ✗ php artisan tinkerPsy 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 bashroot@042969f0229c:/var/www/html# php artisan tinkerPsy 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-apacheRUN docker-php-ext-install pdo_mysql && docker-php-ext-enable pdo_mysqlRUN apt-get update && apt-get install nano && mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"RUN a2enmod rewriteRUN service apache2 restartENV APACHE_DOCUMENT_ROOT=/var/www/html/publicRUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.confRUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.confdocker-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
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

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


在我的情况下,.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档案


查看完整回答
反对 回复 2021-05-07
  • 1 回答
  • 0 关注
  • 369 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信