Symfony:如何使用Docker指定端口和方案?

时间:2017-10-30 16:02:25

标签: php symfony docker nginx

使用symfony遇到url生成问题;使用docker-compose运行php,nginx和postgreSQL。

docker-compose.dev.yml

services:
    php:
        volumes:
            - '.:/srv'
        environment:
            - SYMFONY_ENV=dev

    front:
        environment:
            - VIRTUAL_HOST=localhost
            - VIRTUAL_PORT=8080
        ports:
            - 0.0.0.0:8080:80
        volumes:
            - ./web:/srv
            - /keys/reports.crt:/certs/domain.crt:ro
            - /keys/reports.key:/certs/domain.key:ro

正确设置nginx,允许我访问localhost:8080 - http 200 OK

问题是,symfony和twig没有正确使用此url。 e.g。

index.html.twig

    <link rel="stylesheet" type="text/css" href="{{ url }}{{ asset('email/web/styles/main.css') }}?v=1">

输出,错误的方案,并不包括8080端口。

  

https://localhost/email/web/styles/main.css?v=1

一个建议是将这些变量添加到.env文件

SERVER_HOST=localhost
SERVER_SCHEME=http
SERVER_PORT=8080

然而这没有效果。

symfony config_dev.yml没有任何指定https或不同端口的内容,基本配置也是如此。

任何想法如何使这个工作,Symfony没有从nginx获得该计划?

Intellij Xdebug,在 $ _ SERVER

中显示
  

[SYMFONY__SERVER__HOST] =&gt;本地主机

由于

2 个答案:

答案 0 :(得分:2)

这可能是因为nginx正在侦听容器内的端口80,这使得symfony生成url,就像访问端口也是端口80一样。

您可以尝试的一件事是在配置中将framework.assets.base_urls设置为http://localhost:8080/。这允许您定义用于所有资产URL的基本URL。您还应删除twig文件中的{{ url }}部分,因为资产功能会为您添加此内容。

framework:
    assets:
        base_urls:
            - 'http://localhost:8080/'

有关详细信息:https://symfony.com/doc/current/reference/configuration/framework.html#base-urls

答案 1 :(得分:0)

您的nginx配置需要具有正确的server_name

server {
    server_name _;
    server_alias myapp.dev;
}