16 votes

Comment utiliser les paramètres de proxy local dans docker-compose

Je suis en train de mettre en place un nouveau serveur pour notre installation Redmine, car l'ancienne installation a été faite à la main, ce qui rend difficile de tout mettre à jour correctement. J'ai décidé d'opter pour une image Docker, mais j'ai du mal à démarrer le conteneur Docker en raison d'un message d'erreur. L'hôte fonctionne derrière un serveur proxy, ce qui, je pense, est à l'origine de ce problème, car tout le reste, comme wget, curl, etc. fonctionne bien.

Message d'erreur :

Pulling redmine (redmine:)...
ERROR: Get https://registry-1.docker.io/v2/: dial tcp 34.206.236.31:443: connect: connection refused

J'ai fait des recherches sur Google à propos de l'utilisation de Docker/Docker-Compose avec un serveur proxy en arrière-plan et j'ai trouvé quelques sites Web où les gens avaient le même problème, mais aucun d'entre eux ne m'a vraiment aidé à résoudre mon problème.

J'ai vérifié dans la documentation de Docker et trouvé un guide mais cela ne semble pas fonctionner pour moi : https://docs.docker.com/network/proxy/

J'ai également trouvé une réponse à cette question sur StackOverflow : Utilisation du proxy sur docker-compose dans le serveur qui pourrait être la solution que je recherche, mais je ne sais pas exactement où je dois placer la solution. Je suppose que la personne veut dire le fichier docker-compose.yml mais je peux me tromper.

Voici à quoi ressemble mon docker-compose.yml :

version: '3.1'

services:

redmine:
 image: redmine
 restart: always
 ports:
   - 80:3000
 environment:
   REDMINE_DB_MYSQL: db
   REDMINE_DB_PASSWORD: SECRET_PASSWORD

db:
image: mysql:5.7
restart: always
environment:
  MYSQL_ROOT_PASSWORD: SECRET_PASSWORD
  MYSQL_DATABASE: redmine

Je m'attends à pouvoir exécuter la commande suivante sans le message d'erreur ci-dessus

docker-compose -f docker-compose.yml up -d

35voto

C.Felix Points 647

J'ai fait un peu plus de recherche et il semble que j'ai utilisé de meilleurs mots clés car j'ai trouvé ma solution maintenant. Je voulais partager cette solution avec tout le monde, au cas où quelqu'un en aurait besoin un jour.

  • Créer un dossier pour configurer le service docker via systemd

    mkdir /etc/systemd/system/docker.service.d

  • Créer le fichier de configuration du service à l'adresse /etc/systemd/system/docker.service.d/http-proxy.conf et mettez ce qui suit dans le fichier nouvellement créé

    [Service]

    NO_PROXY is optional and can be removed if not needed

    Change proxy_url to your proxy IP or FQDN and proxy_port to your proxy port

    For Proxy server which require username and password authentication, just add the proper username and password to the URL. (see example below)

    Example without authentication

    Environment="HTTP_PROXY=http://proxy_url:proxy_port" "NO_PROXY=localhost,127.0.0.0/8"

    Example with authentication

    Environment="HTTP_PROXY=http://username:password@proxy_url:proxy_port" "NO_PROXY=localhost,127.0.0.0/8"

  • Rechargez systemctl pour que les nouveaux paramètres soient lus.

    sudo systemctl daemon-reload

  • Vérifiez que l'environnement du service Docker est correctement configuré.

    sudo systemctl show docker --property Environment

  • Redémarrez le service Docker pour qu'il utilise les paramètres d'environnement mis à jour.

    sudo systemctl restart docker

Vous pouvez maintenant exécuter le docker-compose sur votre machine sans obtenir de connection refused les messages d'erreur.

9voto

Pour le serveur proxy qui nécessite un nom d'utilisateur et un mot de passe pour l'authentification : En plus d'ajouter les informations d'identification dans /etc/systemd/system/docker.service.d/http-proxy.conf comme suggéré dans este réponse, j'ai également dû ajouter la même chose au Dockerfile. Voici un extrait du Dockerfile.

FROM ubuntu:16.04

ENV http_proxy http://username:password@proxy_url:proxy_port
ENV https_proxy http://username:password@proxy_url:proxy_port

RUN apt-get update \
    && apt-get upgrade -y \
    && apt-get install -y \
    build-essential \
    bla bla bla ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X