Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/03/2021, à 12:15

Compte supprimé

Docker-compose.yml et les volumes

Bonjour,

Je cherche à comprendre le fonctionnement de docker avec docker-compose.
En me basant sur le tuto de la documentation, j'arrive à créer un serveur lamp qui affiche bien la page que j'ai placée dans ~/www.

Mais cela ne fonctionne que par la méthode simple du tuto ou par docker-compose si je prends le fichier docker-compose.yml donné.
Par contre si je veux passer sur une autre version de php ou mysql, l'installation se fait bien, mais je ne peux pas afficher la page attendue. A la place il y a une erreur 403.

Sur la VM du serveur, je relève ceci :

[Mon Mar 15 10:06:36.113302 2021] [autoindex:error] [pid 16] [client 192.168.0.2:49314] AH01276: Cannot serve directory /var/www/html/: No matching DirectoryIndex (index.php,index.html) found, and server-generated directory index forbidden by Options directive 

Je me demande si le lien entre mes répertoires locaux et ceux des conteneurs docker se fait bien. Qu'est-ce que j'oublie ?

Dernière modification par Compte supprimé (Le 15/03/2021, à 12:16)

#2 Le 15/03/2021, à 13:27

Junkaria

Re : Docker-compose.yml et les volumes

Est-ce que tu as un des fichiers index.php ou index.html dans le dossier /var/www/html/ ?
Que contient ta conf ?


Ubuntu 08.04-11.04 | Linux Mint | ArchLinux

Hors ligne

#3 Le 15/03/2021, à 14:11

Compte supprimé

Re : Docker-compose.yml et les volumes

Est-ce que tu as un des fichiers index.php ou index.html dans le dossier /var/www/html/ ?

Oui, Tamarou a écrit :

un serveur lamp qui affiche bien la page que j'ai placée dans ~/www.

Par contre, pour la configuration, je ne sais même pas comment la consulter. C'est peut-être le début de la solution.

Dernière modification par Compte supprimé (Le 15/03/2021, à 14:12)

#4 Le 20/03/2021, à 23:51

weds

Re : Docker-compose.yml et les volumes

Docker est tellement pratique !

Mais pour avoir un serveur web dans un conteneur qui peut tourner en production, il y a parfois quelques embûches.
J'ai dû construire une image pour pouvoir faire tourner le framework Laravel sur un raspberry pi, ça ne répond pas à ta question mais ça peut te donner un exemple qui marche : https://hub.docker.com/r/moduleart/php-apache-certbot

Il y a le fichier docker-compose.yml avec un conteneur pour la base de donnée, un pour phpmyadmin et un pour le serveur web qui intègre certbot.
La ruse est d'utiliser :

network_mode: host

Ce qui va permettre d'accéder au serveur web comme s'il tournait directement sur le système.

Pour faire un build à ta façon, ce n'est pas difficile :

docker build -t nomDeTonImage:tag chemin/vers/dossierAvecDockerfile

Voici le modèle de Dockerfile à personnaliser :

FROM php:7.4-apache

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf

RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
        zlib1g-dev \
        libxml2-dev \
        libzip-dev \
        libonig-dev \
        graphviz \
        certbot \
        python-certbot-apache

RUN docker-php-ext-configure gd \
    --with-jpeg \
    --with-freetype 

RUN docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install zip \
    && docker-php-source delete

RUN a2enmod rewrite
RUN a2enmod ssl
RUN a2enmod proxy
RUN a2enmod proxy_http
RUN a2enmod proxy_html
RUN a2enmod proxy_wstunnel
RUN a2enmod headers
RUN service apache2 restart

ADD tonCheminVers/ssl-cert-snakeoil.pem /etc/ssl/certs/
ADD tonCheminVers/ssl-cert-snakeoil.key /etc/ssl/private/

# Ports
EXPOSE 80
EXPOSE 443
CMD ["apachectl", "-D", "FOREGROUND"]

ubuntu 20.04 LTS sur hp Probook
Debian Buster sur hp Zbook
raspbian (Buster), raspberry pi, serveur web, mail...

Hors ligne

#5 Le 21/03/2021, à 01:57

krodelabestiole

Re : Docker-compose.yml et les volumes

si c'est toujours d'actualité, poste le contenu complet de ton fichier docker-compose.yml stp.

Hors ligne

#6 Le 21/03/2021, à 10:32

Compte supprimé

Re : Docker-compose.yml et les volumes

Merci, alors voilà après avoir refait la VM et suivi la doc.
Le message dans le terminal quand j'obtiens un 403 forbiden

web_1      | [Sun Mar 21 08:22:43.836358 2021] [autoindex:error] [pid 16] [client 192.168.0.2:37748] AH01276: Cannot serve directory /var/www/html/: No matching DirectoryIndex (index.php,index.html) found, and server-generated directory index forbidden by Options directive
web_1      | 192.168.0.2 - - [21/Mar/2021:08:22:43 +0000] "GET / HTTP/1.1" 403 503 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:86.0) Gecko/20100101 Firefox/86.0"

Le docker-compose.yml

version: '2'

services:
    web:
        image: lavoweb/php-5.6
        ports:
            - "80:80"
        volumes:
            - ~/www:/var/www/html
        links:
            - db:db
    db:
        image: mysql:5.5
        volumes:
            - ~/mysql:/var/lib/mysql
        ports:
            - "3306:3306"
        environment:
            - MYSQL_ROOT_PASSWORD=root
    myadmin:
        image: phpmyadmin/phpmyadmin
        ports:
            - "8080:80"
        links:
            - db:db

Les droits sur www

moi@vm-beebox:~$ ls -al ~/www
total 12
drwxrwxrwx 2 moi moi 4096 Mar 21 08:11 .
drwxr-xr-x 7 moi moi 4096 Mar 21 08:29 ..
-rwxrwxrwx 1 moi moi  432 Mar 21 08:11 index.html
moi@vm-beebox:~$ 

Par contre, phpmyadmin s'affiche bien sur le port 8080.

Edit: je ne me suis pas mis dans le groupe docker et donc je lance :

sudo docker-compose up

Dernière modification par Compte supprimé (Le 21/03/2021, à 10:59)

#7 Le 21/03/2021, à 11:06

Compte supprimé

Re : Docker-compose.yml et les volumes

Je teste en me mettant dans le groupe docker, puis je lance docker-compose up sans sudo.

Je tombe là dedans  ? :
https://github.com/docker/for-win/issues/8164

$ docker-compose up
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

Edit : Tout fonctionne bien et mon index.html s'affiche avec :

sudo docker run -v ~/www:/var/www/html -v ~/mysql:/var/lib/mysql -p 80:80 -p 3306:3306 --restart=always lioshi/lamp:php5

Peut-être que c'est surtout lié aux images docker utilisées.

Dernière modification par Compte supprimé (Le 21/03/2021, à 11:19)

#8 Le 21/03/2021, à 11:27

bruno

Re : Docker-compose.yml et les volumes

Tu as sans doute un problème avec tes volumes.
AMHA, ce n'est pas une bonne idée de spécifier le volume à monter avec un ~ : cela fait référence au dossier personnel de celui qui a lancé la commande docker run. Il vaut mieux indiquer l’emplacement complet :

/home/moi/www:/var/www/html

Cette commande devrait t'indiquer ce qui monté et où :

docker inspect nom_du_conteneur

Concernant le tuto, je vois plusieurs choses à améliorer :
- utiliser un dépôt officiel PHP plutôt que celui d'un dev inconnu (et une version plus récente si possible wink)
- utiliser d'autre ports pour éviter un conflit avec un serveur web ou SGBD déjà installé ;
- je ne comprends pas la création du dossier pour le volume à monter ~/.docker/… et encore moins le chmod 77 wink

Hors ligne

#9 Le 21/03/2021, à 11:39

Compte supprimé

Re : Docker-compose.yml et les volumes

Merci, je vais revoir avec ces remarques.

Edit : j'affiche l'index.html de ~/www
je me suis mis dans le groupe docker, je lance "docker-compose up" sans sudo et j'ai laissé ww en mode 777.

A voir sans le 777 et sans être dans le groupe docker ...

Dernière modification par Compte supprimé (Le 21/03/2021, à 12:28)