我第一次尝试Docker。启动并运行了LEMP堆栈,但我无法连接到MYSQL数据库。不是在我的Symfony应用程序上,不是在PHPMyAdmin上。应用程序返回以下错误代码:
驱动程序中发生异常:SQLSTATE[HY 000] [2002]连接被拒绝
这是我的docker-compose.yml:
nginx:
image: tutum/nginx
ports:
- "80:80"
links:
- phpfpm
volumes:
- ./nginx/default:/etc/nginx/sites-available/default
- ./nginx/default:/etc/nginx/sites-enabled/default
- ./logs/nginx-error.log:/var/log/nginx/error.log
- ./logs/nginx-access.log:/var/log/nginx/access.log
phpfpm:
build: phpfpm/
ports:
- "9000:9000"
volumes:
- ./public:/usr/share/nginx/html
mysql:
image: mariadb
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: admin
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
links:
- mysql
ports:
- 8183:80
environment:
MYSQL_USERNAME: admin
MYSQL_ROOT_PASSWORD: admin
PMA_ARBITRARY: 1
字符串
Dockerfile PHPFPM:
FROM php:fpm
RUN docker-php-ext-enable opcache
RUN apt-get update \
&& apt-get install -y --no-install-recommends libpq-dev \
&& docker-php-ext-install mysqli pdo_pgsql pdo_mysql
型
GitHub URL:https://github.com/MolengraafFrank/DockerSymfony
有人能帮帮我吗?谢谢你的时间。
9条答案
按热度按时间c8ib6hqw1#
我之所以面临这个挑战,是因为我正在使用不同的IP地址运行3个不同的容器
字符串
所以我修改了Laravel .env文件
型
获取容器的IP地址。从你的Docker主机
型
更新:对于最新的Docker版本,基于docker-compose.yml中的服务名称“mysql”
型
你可以试试这个:
型
DB_HOST是在docker-compose.yml中定义的MySQL服务名称
2nbm6dog2#
"[2002] Connection refused“意味着您可以访问数据库服务器,但您没有该用户的权限(在您的示例中为admin)。默认情况下,mariadb有一个root用户,其密码由MYSQL_ROOT_PASSWORD给出,并且此用户可以从任何服务器(%)连接。
如果你想使用一个过度登录到你的数据库,你必须在数据库服务器中创建它,并在所选位置的数据库上授予权限。
这里的问题是您将数据库服务器命名为'mysql'(docker-compose文件中的服务名称)。但phpmyadmin默认尝试连接名为'db'的数据库服务器。在phpmyadmin服务的环境部分添加
PMA_HOST: mysql
可以解决此问题。我认为MYSQL_USERNAME和PMA_ARBITRARY是无用的,如果您使用默认配置(与根连接到您的数据库服务器)
jei2mxaa3#
我使用mysql命令行工具连接到mysql示例,这是我使用的命令-
mysql -u root -p -h 127.0.0.1
,并输入管理员密码。这对你来说是足够的解决方案吗?2izufjch4#
在我的例子中,我在一个端口Map到主机mac(
3306:3306
)的docker容器中运行mysql
。我尝试使用127.0.0.1从phpmyadmin
docker容器连接到这个数据库。但是它不起作用,因为phpmyadmin
docker容器上的localhost
没有运行所需的mysql
。从Docker网络连接到主机
字符串
Docker NetworkingDocker Compose Networking
btqmn9zl5#
对于我的例子,问题是与端口Map不知何故。
在我的例子中,它是
3307:3306
,只要我在右侧将它改为3307
,我就可以连接到DB示例。vs3odd8k6#
如果你想知道为什么你的连接失败,你可以在你的终端php**
artisan tinker
**然后像字符串
不幸的是,这只会给予你错误的一部分。退出修补程序,然后使用这个命令**
php artisan db
**将给予你更多的信息,如数据库类型,主机,端口,广告用户的问题。像这样
型
这不会给给予你什么是错误的答案,但至少你可以理解为什么你的配置是错误的。
x6492ojm7#
此答案为特殊情况的额外提示!
在突然出现错误的情况下,例如,在 * 之前一切都很好,但在停止某些容器或类似的过程中Docker的 * 更新 * 之后,MySQL容器的IP可能会改变,这可能会导致此类错误。在我的情况下,Laravel .env
字符串
而对于Yii 2应用程序来说,
型
我得到了这样的错误为两个应用程序,后他们工作正常.然而,运行
docker inspect mysql
其中mysql是mysql容器的名称显示在网络部分:型
因此,将主机IP从
172.19.0.3
更改为172.19.0.2
可以解决问题。ua4mk5z48#
你需要将phpfpm容器连接到mysql。
af7jpaap9#
添加
DB_READ_HOST=db
为我解决了这个问题