在 docker 容器中的 Symfony 5 上找不到 "GET /user" 的路由

No route found for "GET /user" on Symfony 5 in docker container

为了创建网络服务,我创建了一个新项目,其中包含一个容器 php-nginx 用于网络服务器,postgresql-13 用于 db,所以我基于 FROM php:7.4-fpm-alpine 为 php-nging 容器创建我的 Dockerfile,为我的开发创建 docker-compose.yml。
在 运行 容器之前,我在本地(主机在 Ubuntu Bionic 下)文件夹和 运行 make:entity usermake:crud User 中创建了 symfony squeleton 以获得基本视图。

在 运行 容器之后,我尝试打开 url localhost:8000/user 并且它 returns :
No route found for "GET /user"

我用 php bin/console debug:router 检查我的本地(主机),它 returns :

…
user_index                 GET        ANY      ANY    /user/                             
user_new                   GET|POST   ANY      ANY    /user/new                          
user_show                  GET        ANY      ANY    /user/{id}

路线似乎没问题
但是如果我在容器中做同样的事情,用户就没有路由。

问题是为什么路由在主机中是正确的而不是在 docker 容器中?

所以我连接到容器 docker exec -it my-web-container sh,
然后测试创建一个新实体... php bin/console make:entity test 并查看 src/Controller

中的路由

注释不同:

/**
 * @Route("/test")
 */
class TestController extends AbstractController

对于用户:

#[Route('/user')]
class UserController extends AbstractController

原因是即使我使用 Ubuntu 仿生默认 PHP 7.2,我最近更新到 PHP 7.4(使用 ppa:ondrej/php)支持…它更新为 PHP-8 !当我从主机 make:entity 时,它使用新的 PHP 8 注释而不是 Doctrine 注释,请查看 https://symfony.com/blog/new-in-symfony-5-2-php-8-attributes 了解更多详细信息。

解决方案 1:将我的容器切换到 PHP8

通过更改为 FROM php:8-fpm-alpine

来更新我的容器

解决方案 2:继续使用 Doctrine 注释

但它需要 make:entity 在容器内……或者手动编写……但也许有一个配置来定义我们想要保留原则注释?