Symfony 4 app works with Docker Compose but breaks with Docker Swarm (no login, profiler broken)

孤人 提交于 2019-12-10 10:28:59

问题


I'm using Docker Compose locally with:

  • app container: Nginx & PHP-FPM with a Symfony 4 app
  • PostgreSQL container
  • Redis container

It works great locally but when deployed to the development Docker Swarm cluster, I can't login to the Symfony app. The Swarm stack is the same as local, except for PostgreSQL which is installed on its own server (not a Docker container).

Using the profiler, I nearly always get the following error:

Token not found
Token "2df1bb" was not found in the database.

When I display the content of the var/log/dev.log file, I get these lines about my login attempts:

[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. [] []

The only thing I may find useful here is the Guard authenticator does not support the request. message, but I have no idea what do search from there.


UPDATE:

Here is my docker-compose.dev.yml (removed redis container and changed app environment variables):

version: "3.7"

networks:
    web:
        driver: overlay

services:
    # Symfony + Nginx
    app:
        image: "registry.gitlab.com/my-image"
        deploy:
            replicas: 2
            restart_policy:
                condition: on-failure
        networks:
            - web
        ports:
          - 80:80
        environment:
            APP_ENV: dev
            DATABASE_URL: pgsql://user:pass@0.0.0.0/my-db
            MAILER_URL: gmail://user@gmail.com:pass@localhost

Here is the Dockerfile.dev used to build the app image on development servers:

# 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

UPDATE 2:
I pulled my Docker images and ran the application using only the docker-compose.dev.yml (without the docker-compose.local.yml that I'd use too locally). I have been able to login, everything is okay.

So... It works with Docker Compose locally, but not in Docker Swarm on a remote server.


UPDATE 3:
I made the dev server leave the Swarm cluster and started the services using Docker Compose. It works.

The issue is about going from Compose to Swarm. I created an issue: docker/swarm #2956

来源:https://stackoverflow.com/questions/57143819/symfony-4-app-works-with-docker-compose-but-breaks-with-docker-swarm-no-login

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!