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

C.F*_*lix 7 proxy redmine docker-compose

由于旧的安装是手工完成的,因此我正在为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
Run Code Online (Sandbox Code Playgroud)

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

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

我还在StackOverflow上找到了一个已回答的问题:在服务器上的docker-compose上使用代理,这可能是我想要的解决方案,但是我不确定我必须将解决方案放在哪里。我猜这个人的意思是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
Run Code Online (Sandbox Code Playgroud)

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

docker-compose -f docker-compose.yml up -d
Run Code Online (Sandbox Code Playgroud)

C.F*_*lix 15

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

  • 创建用于通过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 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"
Run Code Online (Sandbox Code Playgroud)
  • 重新加载systemctl,以便读取新设置

    sudo systemctl daemon-reload

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

    sudo systemctl show docker --property Environment

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

    sudo systemctl restart docker

现在,您可以docker-compose在计算机上执行命令,而不会收到任何connection refused错误消息。

  • 感谢@PrasanthGanesan 提出用户名/密码身份验证。我编辑了原来的帖子,并在“http-proxy.conf”中添加了此类身份验证的示例 (2认同)

小智 9

对于这需要用户名和密码进行身份验证的代理服务器:除了添加凭据/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 ...
Run Code Online (Sandbox Code Playgroud)