27

I am setting up a new server for our Redmine installation, since the old installation was done by hand, which makes it difficult to update everything properly. I decided to go with a Docker image but am having trouble starting the docker container due to an error message. The host is running behind a proxy server, which I think, is causing this problem, as everything else such as wget, curl, etc. is working fine.

Error message:

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

I searched on Google about using Docker/Docker-Compose with a proxy server in the background and found a few websites where people had the same issue but none of these really helped me with my problem.

I checked with the Docker documentation and found a guide but this does not seem to work for me: https://docs.docker.com/network/proxy/

I also found an answered question here on StackOverflow: Using proxy on docker-compose in server which might be the solution I am after but I am unsure where exactly I have to put the solution. I guess the person means the docker-compose.yml file but I could be wrong.

This is what my docker-compose.yml looks like:

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

I expect to run the following command without the above error message

docker-compose -f docker-compose.yml up -d
C.Felix
  • 937
  • 1
  • 8
  • 17

2 Answers2

52

I did a bit more research and seem to have used better key words because I found my solution now. I wanted to share the solution with everyone, in case someone else may ever need it.

  • Create folder for configuring docker service through systemd

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

  • Create service configuration file at /etc/systemd/system/docker.service.d/http-proxy.conf and put the following in the newly created file

[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"

 # Example for SOCKS5

Environment="HTTP_PROXY=socks5://proxy_url:proxy_port" "NO_PROXY=localhost,127.0.0.0/8"
  • Reload systemctl so that new settings are read

    sudo systemctl daemon-reload

  • Verify that docker service Environment is properly set

    sudo systemctl show docker --property Environment

  • Restart docker service so that it uses updated Environment settings

    sudo systemctl restart docker

Now you can execute the docker-compose command on your machine without getting any connection refused error messages.

C.Felix
  • 937
  • 1
  • 8
  • 17
  • 1
    How can I enter the password for the proxy? – Prasanth Ganesan Aug 08 '19 at 07:17
  • 1
    @PrasanthGanesan Depending on the protocol you use, you could use one of the following URLs: `http://username:password@proxy_url:proxy_port` `https://username:password@proxy_url:proxy_port` – C.Felix Aug 09 '19 at 09:11
  • 2
    Thanks to @PrasanthGanesan for bringing up the username/password authentication. I edited my original post and added an example of such authentication in the `http-proxy.conf` – C.Felix Aug 09 '19 at 14:20
  • 1
    SOCKS5 can also be used: `HTTP_PROXY=socks5://proxy_url:proxy_port`. – Mattias Wallin May 24 '22 at 11:38
  • 1
    Please note that the proxy settings need trailing slashes at the end! @see https://stackoverflow.com/a/71666466/4666528 – Mel_T Nov 30 '22 at 13:03
10

For the proxy server which requires username and password for authentication: Apart from adding the credentials in /etc/systemd/system/docker.service.d/http-proxy.conf, as suggested in this answer, I also had to add the same to the Dockerfile. Following is a snippet from the 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 ...