我有一个问题,连接到mysql运行在本地机器在我的DockerFile我已经提到
FROM php:7
RUN apt-get update -y && apt-get install -y openssl zip unzip git
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN docker-php-ext-install pdo mbstring pdo_mysql
WORKDIR /home
COPY . /home
RUN composer install --ignore-platform-reqs
CMD php artisan serve --host=0.0.0.0 --port=8081
EXPOSE 8081
在我的.env配置中
DB_HOST=localhost
DB_DATABASE=databasename
DB_USERNAME=root
DB_PASSWORD=testpassword
我对它的失败之处知之甚少。我是否也需要为Docker容器安装MySQL?
4条答案
按热度按时间axr492tv1#
更简单的解决方案(适用于Mac OSX和Docker for Windows)是将主机地址从
localhost
替换为host.docker.internal
基本上,DNS名称
host.docker.internal
将解析为主机使用的内部IP地址。NB:如果您已将地址更改为
host.docker.internal
,但仍然收到connection refused
错误,很可能是因为MySQL当前配置为仅侦听本地网络。要解决此问题,请在
my.cnf
配置文件中将bind_address
的值更新为0.0.0.0
。fcg9iug32#
你正在尝试连接到mysql在
localhost
,这是(令人惊讶的)引用到本地主机.因为它是一个相对地址,在容器内部它被解析为容器自己的地址,并且没有mysql在那里等着你...所以要解决它-只要给予它你的真实的的主机ip而不是localhost
或127.0.0.1
.步骤1 -修复.env文件:
步骤2 -创建专用用户:
打开你的mysql:
mysql -u root -p
,给予您的root密码,然后运行以下命令:我们创建了用户并赋予了它权限。
步骤3 -打开mysql进行远程访问:
我们必须让它监听所有接口而不仅仅是localhost,因此我们运行:
sudo sed 's/.*bind-address.*/bind-address=0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
(you将被提示输入密码。这个命令只是替换mysql配置文件中的行)
第4步-更新:
1.在项目目录中:
php artisan config:cache
service mysql restart
然后Docker重新构建并运行一个新的容器,它应该对你有效。
b4lqfgs43#
我看到两个选择-
1.使用您的docker主机的私有IP,即mysql服务器运行的地方。
1.如果您想使用localhost,请在运行container时使用主机网络模式。
docker container --net=host ...
0dxa2lsx4#
在我的例子(Ubuntu 20.04桌面)中,我已经运行了MariaDB并使用端口3306。因此,当Docker容器中的应用程序试图启动容器中的MySQL时,它失败了,因为它试图监听一个已经使用的端口。我使用下面的命令关闭了已经运行的MariaDB:
然后尝试启动Docker应用程序。它运行成功,因为端口3306现在是空闲的,并由容器内的MySQL使用。但由于我打算同时使用它们,一个更持久的解决方案将是配置数据库系统之一,即Docker容器内的或Docker容器外的使用默认端口3306以外的其他端口。