由于投了反对票,我重构了这个问题。就像这样简单:外部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 回答
![?](http://img1.sycdn.imooc.com/545863080001255902200220-100-100.jpg)
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档案
- 1 回答
- 0 关注
- 369 浏览
添加回答
举报
0/150
提交
取消