Symfony 4应用程序与Docker Compose一起工作,但与Docker Swarm一起中断(无登录,档案器中断)
我正在本地使用Docker ComposeSymfony 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文件的内
- 应用程序容器:Nginx和PHP-FPM,带有Symfony 4应用程序
- PostgreSQL容器
- Redis容器
在数据库中找不到令牌“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