如何在docker-compose中使用本地代理设置

问题描述 投票:0回答:2

我正在为我们的Redmine安装设置一个新服务器,因为旧的安装是手动完成的,这使得很难正确更新所有内容。我决定使用 Docker 映像,但由于错误消息而无法启动 docker 容器。主机在代理服务器后面运行,我认为这是导致此问题的原因,因为 wget、curl 等其他所有内容都工作正常。

错误信息:

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

我在 Google 上搜索了有关在后台使用带有代理服务器的 Docker/Docker-Compose 的信息,发现了一些网站,人们也遇到了同样的问题,但这些网站都没有真正帮助我解决我的问题。

我检查了 Docker 文档并找到了指南,但这似乎对我不起作用:https://docs.docker.com/network/proxy/

我还在 StackOverflow 上找到了一个已回答的问题: Using proxy on docker-compose in server 这可能是我想要的解决方案,但我不确定我到底应该把解决方案放在哪里。我猜这个人的意思是 docker-compose.yml 文件,但我可能是错的。

这就是我的 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

我希望运行以下命令而不会出现上述错误消息

docker-compose -f docker-compose.yml up -d
proxy docker-compose redmine
2个回答
52
投票

我做了更多的研究,似乎使用了更好的关键词,因为我现在找到了我的解决方案。我想与大家分享解决方案,以防其他人可能需要它。

  • 创建一个文件夹,用于通过systemd配置Docker服务

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

  • /etc/systemd/system/docker.service.d/http-proxy.conf
    处创建一个服务配置文件,并将以下内容放入新创建的文件中

[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 servers that 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"
  • 重新加载 systemctl 以便读取新设置

    sudo systemctl daemon-reload

  • 验证docker服务环境是否设置正确

    sudo systemctl show docker --property Environment

  • 重新启动 docker 服务,以便它使用更新的环境设置

    sudo systemctl restart docker

现在您可以在计算机上执行

docker-compose
命令,而不会收到任何
connection refused
错误消息。


10
投票

对于需要用户名和密码进行身份验证的代理服务器:除了按照

this
答案中的建议在 /etc/systemd/system/docker.service.d/http-proxy.conf 中添加凭据之外,我还必须将其添加到 Dockerfile 中。以下是 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 ...
© www.soinside.com 2019 - 2024. All rights reserved.