docker上的Mysql给出了“连接拒绝”错误

9jyewag0  于 12个月前  发布在  Mysql
关注(0)|答案(3)|浏览(181)

我用docker-compose创建了Laravel项目。我在本地创建了一个名为fhblog的数据库。当我进入php容器并运行php artisan migrate命令时,我得到以下错误。

SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = fhblog and table_name = migrations and table_type = 'BASE TABLE')

我寻找解决问题的办法,听从人们的建议,但错误无法解决。

我的.env文件

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=fhblog
DB_USERNAME=fhblog
DB_PASSWORD=root

我的mysql容器

.
  .
  .
  db:
    image: mysql:5.7.22
    container_name: mysql
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_USER: root
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: fhblog
      MYSQL_USER: fhblog
      MYSQL_PASSWORD: root
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - ./docker/mysql/db:/var/lib/mysql
      - ./docker/mysql/my.cnf:/etc/mysql/my.cnf
    networks:
      - app-network
  .
  .
  .

在我的研究中,建议运行php artisan cache:clearphp artisan config:clear命令,因为它们可以保留在“缓存”中。这些命令也没有解决我的问题。错误在哪里?

ego6inou

ego6inou1#

我认为你应该使用MySQL的内部IP而不是容器名;登录到mysql容器并运行bash,然后输入ifconfig可能您的ip地址是这样的

172.0.0.23

复制并粘贴到

DB_HOST=

但首先尝试使用容器名称作为您的

DB_HOST=mysql

或者将其重命名为mysql以外的名称
例如mysql_container

container_name: mysql_container
...
DB_HOST=mysql_container
xqkwcwgp

xqkwcwgp2#

我之前试过我的mysql ip。当我在DBeaver上得到一个连接拒绝错误时,它给了我一个IP地址17.23.0.1。我以为这是我的mysql IP,并尝试了这种方式。我想看看我的容器IP,并尝试了以下命令。出来的IP不一样。有了这个IP,我终于能够运行php artisan migrate代码了。

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

后来我意识到这是不必要的。如果我直接给出容器名,我的问题处理得更整洁。

DB_HOST=db
3z6pesqy

3z6pesqy3#

如果你使用的是macos系统的电脑,你把3306端口改成不同的端口,问题就解决了。

相关问题