Symfony 4应用程序与Docker Compose一起工作,但与Docker Swarm一起中断(无登录,档案器中断)

Symfony 4应用程序与Docker Compose一起工作,但与Docker Swarm一起中断(无登录,档案器中断),symfony,docker,authentication,symfony4,docker-swarm,Symfony,Docker,Authentication,Symfony4,Docker Swarm,我正在本地使用Docker Compose 应用程序容器:Nginx和PHP-FPM,带有Symfony 4应用程序 PostgreSQL容器 Redis容器 它在本地工作得很好,但部署到开发Docker Swarm集群时,我无法登录Symfony应用程序。 Swarm堆栈与local相同,只是PostgreSQL安装在自己的服务器上(不是Docker容器) 使用探查器,我几乎总是会遇到以下错误: 找不到令牌 在数据库中找不到令牌“2DF1B” 当我显示var/log/dev.log文件的内

我正在本地使用Docker Compose

  • 应用程序容器:NginxPHP-FPM,带有Symfony 4应用程序
  • PostgreSQL容器
  • Redis容器
它在本地工作得很好,但部署到开发Docker Swarm集群时,我无法登录Symfony应用程序。 Swarm堆栈与local相同,只是PostgreSQL安装在自己的服务器上(不是Docker容器)

使用探查器,我几乎总是会遇到以下错误:

找不到令牌
在数据库中找不到令牌“2DF1B”

当我显示
var/log/dev.log
文件的内容时,我会得到以下关于我的登录尝试的行:

[2019-07-22 10:11:14] request.INFO: Matched route "app_login". {"route":"app_login","route_parameters":{"_route":"app_login","_controller":"App\\Controller\\SecurityController::login"},"request_uri":"http://dev.ip/public/login","method":"GET"} []
[2019-07-22 10:11:14] security.DEBUG: Checking for guard authentication credentials. {"firewall_key":"main","authenticators":1} []
[2019-07-22 10:11:14] security.DEBUG: Checking support on guard authenticator. {"firewall_key":"main","authenticator":"App\\Security\\LoginFormAuthenticator"} []
[2019-07-22 10:11:14] security.DEBUG: Guard authenticator does not support the request. {"firewall_key":"main","authenticator":"App\\Security\\LoginFormAuthenticator"} []
[2019-07-22 10:11:14] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
我在这里发现唯一有用的是
Guard authenticator不支持请求。
消息,但我不知道从那里搜索什么


更新:

这是我的
docker compose.dev.yml
(删除了redis容器并更改了应用程序环境变量):

以下是用于在开发服务器上构建应用程序映像的
Dockerfile.dev

# Base image
FROM php:7.3-fpm-alpine

# Source code into:
WORKDIR /var/www/html

# Import Symfony + Composer
COPY --chown=www-data:www-data ./symfony .
COPY --from=composer /usr/bin/composer /usr/bin/composer

# Alpine Linux packages + PHP extensions
RUN apk update && apk add \
        supervisor \
        nginx \
        bash \
        postgresql-dev \
        wget \
        libzip-dev zip \
        yarn \
        npm \
    && apk --no-cache add pcre-dev ${PHPIZE_DEPS} \
    && pecl install redis \
    && docker-php-ext-enable redis \
    && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
    && docker-php-ext-install pdo_pgsql \
    && docker-php-ext-configure zip --with-libzip \
    && docker-php-ext-install zip \
    && composer install \
        --prefer-dist \
        --no-interaction \
        --no-progress \
    && yarn install \
    && npm rebuild node-sass \
    && yarn encore dev \
    && mkdir -p /run/nginx

# Nginx conf + Supervisor entrypoint
COPY ./dev.conf /etc/nginx/conf.d/default.conf
COPY ./.htpasswd /etc/nginx/.htpasswd
COPY ./supervisord.conf /etc/supervisord.conf

EXPOSE 80 443

ENTRYPOINT /usr/bin/supervisord -c /etc/supervisord.conf

更新2:
pull
编辑了我的Docker图像,并仅使用
Docker compose.dev.yml
运行应用程序(没有我在本地使用的
Docker compose.local.yml
)。我已经可以登录了,一切都很好

所以。。。它可以在本地使用Docker Compose,但不能在远程服务器上的Docker Swarm中使用


更新3:
我让开发服务器离开Swarm集群,并使用Docker Compose启动服务。它起作用了


这个问题是关于从组合群集。我提出了一个问题:

也许这不是您的具体情况,但它可以帮助一些用户解决使用Docker Swarm时遇到的问题,而Docker Compose中没有这些问题

我已经为这个问题争论了一个多星期了。我发现Docker Compose的默认网络使用桥接驱动程序,Docker Swarm使用覆盖

稍后,我在中的“注意事项”部分中读到,覆盖网络中的IPV连接超时存在一个问题,它指的是解决方案

我尝试使用第一个选项,并在我的
docker compose.yml
文件中将设置更改为
dnsrr

db:
    image: postgres:12
    # Others settings ...
    deploy:
        endpoint_mode: dnsrr
请记住,有一些警告(博客中提到)要考虑。但是,您可以尝试其他选项


此外,您可能会发现一些有用的东西,因为他们面临相同的问题。

这是您的
App\Security\LoginFormAuthenticator->supports($request)
导致此问题。里面有什么?@Roukmoute它只检查路线是否是
app\u login
和方法
POST
。根据日志,使用了
GET
方法,但在分析器中我可以看到POST数据。我很惊讶您的日志没有显示POST数据。你的帖子是HTML标准还是javascript?我不知道确切的问题,但我有一些想法让你尝试找出:1。现在将docker-compose.DEV.yml文件中的
APP_DEV
更改为
local
,而不是
DEV
,以查看是否出现相同的错误,如果没有,则是环境问题。可能是:-config_dev.yml文件-如果.htaccess文件用于使用app_dev.php,则检查.htaccess和app_dev.php文件2。检查nginx conf文件中定义的日志文件路径,查看访问日志和错误日志,查看是否存在权限或其他问题。3.
DATEBADE\u URL
参数可能就是问题所在。(上一条评论中没有足够的空间。)。您可以尝试执行swarm中的一个容器,并从那里手动连接到您的postgres db,如果这甚至不起作用,则说明防火墙或网络存在问题。
db:
    image: postgres:12
    # Others settings ...
    deploy:
        endpoint_mode: dnsrr