【问题标题】:Can't find database container: Laravel development in local docker containers on Windows 10找不到数据库容器:Windows 10 本地 docker 容器中的 Laravel 开发
【发布时间】:2021-07-28 18:27:25
【问题描述】:

我正在使用 this tutorial 迈出 Laravel(+passport) 的第一步。我已经使用 WSL2 为 Win10 设置了 Docker,并按照步骤使用 Laravel-Sail 来管理容器(从 Ubuntu wsl 实例内部)。这运行一个单独的 MySQL 容器。在运行php artisan migrate:install 时遇到SQLSTATE[HY000] [2002] No such file or directory 的几个问题后,我发现我应该将.env 中的DB_HOST=mysql 更改为DB_HOST=127.0.0.1。此外,由于我已经有一个 MySQL 服务作为 WAMP 的一部分运行,因此我通过将 FORWARD_DB_PORT=3366 添加到 .env 并将 'port' => env('FORWARD_DB_PORT', '3306'), 添加到 config/database.php,在端口 3366 上公开了 Sail 的 MySQL 容器。现在我终于能够完成教程了。

一切就绪后,我尝试使用邮递员测试路由,但此时,网络服务器现在无法找到 mysql 服务器。在尝试了一些事情之后,我发现将上述更改恢复为默认值可以解决此问题。但是,现在再次工匠找不到 mysql 服务器。我似乎需要在这两个设置之间切换才能让网络服务器使用 mysql 服务器并使用工匠对其进行更改。

我的预感是我正在尝试一些我不应该尝试的事情,但我无法弄清楚我应该做什么。

这个问题对我来说似乎很简单:如何在 Windows10 本地处理容器化 Laravel 项目?还是我自己让这件事变得困难,我应该只使用 Linux(我个人对此没有问题,但我应该能够说服我的同事,他们应该使用相同的本地开发设置)?

【问题讨论】:

  • 你想在 Docker 容器中运行 PHP 和 Mysql(我认为这是一个更好的解决方案)还是在你机器上的 Docker 和 Mysql 服务器中运行 PHP?
  • 您可以使用 docker-compose 来设置您的项目基础架构(PHP、Mysql、Nginx)并且您的容器将相互看到
  • @MichaelKrutikov 我在各自的容器中运行 PHP 和 MySQL。正如我在问题中所写,他们确实在默认设置下看到了对方,但是,当我使用这些默认设置从容器外部运行它时,Artisan 找不到 MySQL。我现在使用了一个 janky hack 来让它工作。我应该从 PHP 容器中运行 artisan 吗?
  • 在容器内运行 artisan 登录 php 容器:docker exec -ti {your_container_name} bash。要查找容器名称,请在终端 docker ps 中运行。登录容器后,您可以执行控制台脚本,包括 artisan
  • @MichaelKrutikov 谢谢,这确实有效。我的问题更多是关于这是否是它应该工作的方式?由于我和我的团队计划在此设置上进行大量工作,因此我们不希望遇到在诸如 SO 之类的公共资源中找不到解决方案的不规范、非标准设置的怪癖。

标签: mysql laravel docker


【解决方案1】:

所以对于任何发现这个问题的人来说,我遇到了同样的问题:我找到了解决方案。

正如@MichaelKrutikov 在 cmets 中提到的,您确实应该在应用程序容器内执行工匠命令。但是,不是直接在容器中的 shell 中工作,而是应该通过运行来执行此操作

$ ./sail artisan list

vendor/bin/sail artisan list 在我的情况下。见here

不知何故,这个非常重要的细节没有在任何教程中提及,也没有在可能与此相关的问题的任何答案中提及。

【讨论】:

猜你喜欢
  • 2021-02-16
  • 2020-11-17
  • 2021-05-22
  • 1970-01-01
  • 2023-03-19
  • 2019-02-24
  • 2019-10-12
  • 2019-02-21
  • 2021-11-20
相关资源
最近更新 更多