Forum Linux.général Docker-Apache: mon docker refuse de s'excuter en tant que démon

Posté par  . Licence CC By‑SA.
Étiquettes :
1
27
mai
2020

Salut à tous,

Je cherche à faire un simple container docker avec apache en vue d'exposer une simple page HTML de maintenance mais je galère.
Une fois exécuté (avec option -d) mon container s'arrête immédiatement, je suppose parce que apache s'arrête mais je ne sais pas précisément pourquoi.
Pouvez vous m'aider à aboutir à un résultât qui fonctionne ?

Voici le contenu de mon Dockerfile:

FROM httpd:2.4
RUN mkdir -p /var/www/ssl
COPY ./vhostam /usr/local/apache2/conf/httpd.conf
COPY ./content/ /usr/local/apache2/htdocs/
COPY ./ssl/     /var/www/ssl/

Voici l'aborescence du build:

    /
    ├── content
       ├── am-maintenance-SI.jpg
       └── index.html
    ├── Dockerfile
    ├── ssl
       ├── _.am.fr.crt
       ├── private.key
       ├── wildcard-em.fr.pem
       └── wildcardem.cert
    └── vhostam

Le contenu de mon vhost:

    <VirtualHost *:443>
       ServerName *.am.fr
       SSLEnable
       DocumentRoot /var/www/ssl/
    </VirtualHost>

le resultat de ma commande docker-run :

    root@test-www-1:~# docker run -p 443:443  -dit --name sitedown  maintenance
    b16e6c57f7a51c9384cb7de1bfa14f963fcbf7d7e0eecb021612e70e74e0601f

Le docker ps immediatement après indique qu'aucun container ne tourne mais le docker ps -a m'indique que le container s'est bien executé.

        root@test-www-1:~# docker ps -a
        CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS                    PORTS                          NAMES
        b16e6c57f7a5        maintenance         "httpd-foreground"   14 hours ago        Exited (1) 14 hours ago

Merci de votre aide

  • # question : Quand exécutes tu apache ?

    Posté par  . Évalué à 2. Dernière modification le 27 mai 2020 à 12:03.

    Bonjour dans ton container quand lance tu apache ?

  • # RUN

    Posté par  (site web personnel) . Évalué à 1.

    il te manque une commande RUN

    • [^] # Re: RUN

      Posté par  . Évalué à 2. Dernière modification le 27 mai 2020 à 15:24.

      • ce n'est pas ce qui est indiqué dans la doc : https://hub.docker.com/_/httpd (section How to use this image.)
      • FROM httpd introduit une forme d'héritage
      • il y a donc autre chose à intégrer. Pour l'instant je ne vois pas.

      tu peux essayer de le lancer en intéractif :

      docker run --rm -p 443:443 it --name sitedown maintenance

      cela va te permettre de voir les logs apache.

      • [^] # Re: RUN

        Posté par  . Évalué à 2. Dernière modification le 27 mai 2020 à 15:25.

        dans la dernière commande "s/it/-it/"

  • # Merci

    Posté par  . Évalué à 1.

    Merci pour vos réponses.

    En effet la commande de Marc > docker run --rm -p 443:443 it --name sitedown maintenance
    permet de voir les logs apache.

    J'ai modifié mon vhost de la façon suivante car au début l'erreur était un truc du genre module NPM not loaded

    _<VirtualHost *:443>
       ServerAlias *.monsite.fr
       DocumentRoot /usr/local/apache2/htdocs/
       SSLCertificateFile /var/www/ssl/wildcardem.cert
       SSLCertificateKeyFile /var/www/ssl/private.key
    </VirtualHost>
    
    LoadModule mpm_event_module modules/mod_mpm_event.so
    LoadModule ssl_module /usr/lib64/apache2-prefork/mod_ssl.so_
    

    Désormais l'erreur est

    httpd: Syntax error on line 9 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/lib64/apache2-prefork/mod_ssl.so into server: /usr/lib64/apache2-prefork/mod_ssl.so: cannot open shared object file: No such file or directory

    Connaissez vous un docker avec un config apache SSL directement exploitable?
    Ou avez vous une solution simple pour corriger ce pb et faire ne sorte que ça fonctionne?

    Merci

    • [^] # Re: Merci

      Posté par  . Évalué à 2.

      tu peux ouvrir un shell interactif avec cette commande :

      docker run --rm --entrypoint /bin/bash -it httpd:2.4

      par la suite, on peut voir :

      root@a4ed3484ec4a:/usr/local/apache2# ls /usr/lib64/apache2-prefork/mod_ssl.so
      ls: cannot access '/usr/lib64/apache2-prefork/mod_ssl.so': No such file or directory
      root@a4ed3484ec4a:/usr/local/apache2# ls /usr/local/apache2/modules/mod_ssl.so 
      /usr/local/apache2/modules/mod_ssl.so
      

      il te faut donc faire un include avec le bon répertoire pour le module SSL.so

      • [^] # Re: Merci

        Posté par  . Évalué à 1.

        Ah d'accord, tu veux dire modifier la directive Load module en pointant le bon emplacement ?
        Merci bcp.

      • [^] # Re: Merci

        Posté par  . Évalué à 1.

        Voici ce qu'il me dit maintenant.

        root@test-www-1:~/docker/maintenance# docker run --rm -p 443:443 -it --name sitedown maintenance:0.1
        no listening sockets available, shutting down
        AH00015: Unable to open logs

        C'est étrange car j'ai fait un netstat -tulpn pour voir si le port 443 était déjà occupé mais il ne l'est pas.

        • [^] # Re: Merci

          Posté par  . Évalué à 2. Dernière modification le 28 mai 2020 à 21:49.

          tu peux essayer -p 4443:443 pour mettre le serveur sur un port HTTPS alternatif.

          • [^] # Re: Merci

            Posté par  . Évalué à 1.

            Merci Marc
            Voici le resultat, toujours pareil.

            root@test-www-1:~# docker run --rm -p 4443:443 -it --name sitedown maintenance:0.1
            no listening sockets available, shutting down
            AH00015: Unable to open logs

            J'ai essayé d'ajouter une directive EXPOSE 443 dans mon docker file mais rien n'y fait.

    • [^] # Re: Merci

      Posté par  . Évalué à 2.

      Tu peux voir les logs d’un container avec docker logs aussi.

  • # Merci à vous tous

    Posté par  . Évalué à 2.

    Merci à vous tous

    J'ai finalement trouvé une autre solution en construisant un conteneur à partir d'une image ubuntu.
    ```
    FROM ubuntu:18.04

    Apache ENVs

    ENV APACHE_RUN_USER www-data
    ENV APACHE_RUN_GROUP www-data
    ENV APACHE_SERVER_NAME web.monsite.fr
    ENV APACHE_SERVER_ADMIN moi@monsite.fr
    ENV APACHE_SSL_CERTS /var/www/ssl/wildcardem.cert
    ENV APACHE_SSL_PRIVATE /var/www/ssl/private.key
    ENV APACHE_SSL_PORT 443
    ENV APACHE_LOG_LEVEL info
    ENV APACHE_SSL_LOG_LEVEL info
    ENV APACHE_SSL_VERIFY_CLIENT optional
    ENV APACHE_HTTP_PROTOCOLS http/1.1
    ENV APPLICATION_URL https://${APACHE_SERVER_NAME}:${APACHE_SSL_PORT}

    Install services, packages and do cleanup

    RUN apt update \
    && apt install -y apache2 \
    && apt install -y curl \
    && apt install -y python3-pip \
    && apt install -y git \
    && rm -rf /var/lib/apt/lists/*

    RUN rm -rf /etc/apache2/sites-available/000-default.conf

    RUN a2enmod ssl \
    && a2enmod headers \
    && a2enmod rewrite \
    && a2dismod mpm_prefork \
    && a2dismod mpm_event \
    && a2enmod mpm_worker \
    && a2enmod proxy_fcgi \
    && a2enmod http2 \
    && a2enmod proxy \
    && a2enmod proxy_http \
    && a2enmod remoteip \
    && a2ensite default-ssl

    RUN chown -R www-data:www-data /var/www/
    RUN mkdir /var/www/ssl/

    RUN chown -R www-data:www-data /var/www/ssl
    RUN chown -R www-data:www-data /var/www/html

    COPY ./vhostem /etc/apache2/sites-available/httpd.conf
    COPY ./content/ /var/www/html/
    COPY ./ssl/ /var/www/ssl/

    EXPOSE ${APACHE_SSL_PORT}

    CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]
    ```

    Merci beaucoup pour votre aide

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.