Je viens de commencer à utiliser Docker car on me l'a recommandé pour faciliter le développement, mais jusqu'à présent, ce n'est rien d'autre que de la souffrance. J'ai installé docker engine (v20.10.12)
y docker composer (v 2.2.3)
selon la documentation donnée par docker pour Ubuntu OS. Les deux fonctionnent comme prévu.
Chaque fois que je crée un nouveau conteneur avec docker compose
Peu importe la source, j'ai des problèmes de privilèges d'écriture sur les fichiers générés par le conteneur docker (par exemple une application Laravel où j'ai utilisé php artisan pour créer un fichier contrôleur). Jusqu'à présent, j'ai identifié le problème comme étant le suivant :
Par défaut, docker s'exécute en tant que Root dans le conteneur. Il fait le "pont" entre l'utilisateur Root et l'utilisateur Root sur la machine locale et utilise root:root
pour créer des fichiers sur le système de fichiers Ubuntu (mon espace de travail est placé dans le répertoire ~/workspace/laravel
). Ensuite, lorsque vous ouvrez les fichiers dans un IDE ( vscode
dans ce cas) je reçois l'erreur :
Failed to save to '<file_name>': insufficient permissions. Select 'Retry as Sudo' to retry as superuser
Si j'essaie d'analyser mon propre utilisateur local dans la machine et que je lui demande d'utiliser cet identifiant et ce groupe spécifiques, tout va bien si j'utilise le premier utilisateur créé sur la machine ( 1000:1000
) puisque cela correspondra à l'utilisateur par défaut des conteneurs si nous regardons le fichier bitnami/laravel
image docker par exemple.
Tout cela peut être corrigé en exécutant chown -R yadayada .
sur le répertoire de l'espace de travail à chaque fois que j'utilise php artisan
pour créer un fichier. Mais je ne pense pas que cela soit durable ou intelligent de quelque manière que ce soit.
Comment puis-je dire à mon conteneur Docker de vérifier, au démarrage, si un utilisateur avec mon nom d'utilisateur et mon mot de passe a été sélectionné ? UID
y GID
existe et si ce n'est pas le cas, créer un utilisateur avec cet identifiant et l'assigner comme utilisateur du système ?
Mon docker-compose.yml pour cet exemple
version: '3.8'
services:
api_php-database:
image: postgres
container_name: api_php-database
restart: unless-stopped
environment:
POSTGRES_PASSWORD: secret
POSTGRES_DB: laravel_docker
volumes:
- ./postgres-data:/var/lib/postgresql/data
ports:
- '5432:5432'
api_php-apache:
container_name: api_php-apache
build:
context: ./php
ports:
- '8080:80'
volumes:
- ./src:/var/www/laravel_docker
- ./apache/default.conf:/etc/apache2/sites-enabled/000-default.conf
depends_on:
- api_php-database
Mon Dockerfile pour cet exemple
FROM php:8.0-apache
RUN apt update && apt install -y g++ libicu-dev libpq-dev libzip-dev zip zlib1g-dev && docker-php-ext-install intl opcache pdo pdo_pgsql pgsql
WORKDIR /var/www/laravel_docker
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer