【问题标题】:Docker-compose with golang-onbuild fails download behind proxy使用 golang-onbuild 的 Docker-compose 在代理后面下载失败
【发布时间】:2017-11-23 16:41:43
【问题描述】:

在没有代理的机器上,我写了main.go、Dockerfile和docker-compose.yml这样的,docker-compose up成功完成。

package main

import (
    "fmt"
    "github.com/garyburd/redigo/redis"
    "log"
    "net/http"
)

func main() {
    redi, err := redis.Dial("tcp", "redis:6379")

/// SNIP ///

    log.Fatal(http.ListenAndServe(":5000", nil))
}

Dockerfile

# Dockerfile
FROM golang:onbuild
EXPOSE 5000

docker-compose.yml

# docker-compose.yml
version: '2'
services:
  web:
    build: .
    ports:
      - 5000:5000
    depends_on:
      - redis
  redis:
    image: redis

但是,(当然)它们不在代理后面的机器上运行。 我修改了 Dockerfile 和 docker-compose.yml 之类的;

Dockerfile

# Dockerfile
FROM golang:onbuild
ENV HTTP_PROXY http://proxy.mycompany.com:10080
ENV HTTPS_PROXY http://proxy.mycompany.com:10080
ENV http_proxy http://proxy.mycompany.com:10080
ENV https_proxy http://proxy.mycompany.com:10080
EXPOSE 5000

docker-compose.yml

# docker-compose.yml
version: '2'
services:
  web:
    build: .
    ports:
      - 5000:5000
    volumes:
      - ".:/redis-go-sample"
    depends_on:
      - redis
    environment:
      - HTTP_PROXY=${HTTP_PROXY}
      - HTTPS_PROXY=${HTTP_PROXY}
      - http_proxy=${HTTP_PROXY}
      - https_proxy=${HTTP_PROXY}
  redis:
    image: redis

结果是;

Building web
Step 1/6 : FROM golang:onbuild
# Executing 3 build triggers...
Step 1/1 : COPY . /go/src/app
 ---> Using cache
Step 1/1 : RUN go-wrapper download
 ---> Running in 8e311bec859c
+ exec go get -v -d
github.com/garyburd/redigo (download)
# cd .; git clone https://github.com/garyburd/redigo /go/src/github.com/garyburd/redigo
Cloning into '/go/src/github.com/garyburd/redigo'...
fatal: unable to access 'https://github.com/garyburd/redigo/': Could not resolve host: github.com
package github.com/garyburd/redigo/redis: exit status 128
ERROR: Service 'web' failed to build: The command '/bin/sh -c go-wrapper download' returned a non-zero code: 1

正如最后一条错误消息所说,我猜这个问题是由代理环境的 golang-onbuild 或 go-wrapper 错误处理引起的。

我该如何解决这个问题?

【问题讨论】:

    标签: docker go proxy docker-compose dockerfile


    【解决方案1】:

    环境参数在运行容器时使用,而不是在构建时使用。在您的情况下,构建图像失败。 您需要使用构建参数。构建参数可以这样添加到 compose 文件中:

    version: '2'
    services:
      web:
        build:
          context: .
          args:
            - HTTP_PROXY: http://proxy.mycompany.com:10080
            - HTTPS_PROXY: http://proxy.mycompany.com:10080
            - http_proxy: http://proxy.mycompany.com:10080
            - https_proxy: http://proxy.mycompany.com:10080
        ports:
          - 5000:5000
        volumes:
          - ".:/redis-go-sample"
        depends_on:
          - redis
    ...   
    

    【讨论】:

    • 谢谢。我试过了,但 docker-compose up 在“args:”行上说“错误:yaml.scanner.ScannerError:此处不允许映射值”。你有什么想法吗?
    • @HirofumiTamori 更新了撰写文件。显然,上下文需要单独一行
    • 还有 args: 值应更改为“- HTTP_PROXY=http://...”样式。但它仍然不起作用。这一次,错误消息变成了“无法解析 proxy.mycompany.com”!我可以将 DNS 相关值传递给容器吗?
    • @HirofumiTamori 如何通过 ping 代理并在撰写文件中设置 IP 来手动解析代理 IP?一般来说,我建议安装一个工具来透明地将流量路由到代理。 stackoverflow.com/questions/45340644/…
    • 好的,成功了!稍后我会尝试 redsocks。但最好的解决方案可能是使用外联网服务器进行 docker 开发,如云。
    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 2017-06-30
    • 2011-10-18
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多