Docker 学习一:使用 golang 镜像运行自己的 go 程序-操作过程及遇到问题解决办法

本文介绍了在comm_mock_svr目录下,使用Docker构建Go应用镜像及启动容器的操作步骤,包括切换目录、新建Dockerfile、构建镜像和启动容器。还说明了COPY指令的使用、go get走代理的问题,以及golang官方基础镜像过大的情况,同时给出了docker build时go get走宿主机http代理的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设你的 go 应用程序在 comm_mock_svr/ 目录下,操作过程如下:

a. 切换到你的 go 应用程序所在目录: cd comm_mock_svr
b. 新建 Dockerfile 文件: tee ./Dockerfile <<-'EOF' ,写入如下内容:
FROM golang
WORKDIR /go/src

#以下指令将 comm_mock_svr 目录下内容(包括子目录)复制到容器内的 /go/src/comm_mock_svr/ 目录下
COPY ./ comm_mock_svr/
WORKDIR /go/src/comm_mock_svr
#RUN go get -d -v golang.org/x/crypto/ssh github.com/pkg/sftp github.com/kr/fs \
#       github.com/pkg/errors golang.org/x/text golang.org/x/text/transform

#以下指令自动下载 comm_mock_svr 所导入的第三方库,可能需要走代理才能下载,下面具体说明代理配置问题
RUN go get -d -v ./...
RUN go install -v .
EXPOSE 6610
ENTRYPOINT [ "comm_mock_svr", "-output", "console"]
EOF


c. 构建镜像:
docker build \
--build-arg http_proxy=http://192.168.11.5:1087 \
--build-arg https_proxy=http://192.168.11.5:1087 \
-t comm_mock_svr .

d. 启动容器:
docker run -it --name mock_svr -p 6610:6610 comm_mock_svr
正常将成功运行。

特别说明:
a. COPY 指令如果期望复制包含子目录的全部内容,则目标地址应该是一个目录格式,以 / 结尾。
b. docker build 期间 go get 要走代理,否则无法下载依赖库。另一种做法,不使用 go get, 将事先下载好的依赖包全部复制到容器内部。
c. 由于 golang 官方基础镜像比较大,近 800M,由此构建出来的镜像同样也巨大无比,建议只是在开发阶段使用。

d. 关于 docker build 时让 go get 走宿主机 http 代理的特殊注意事项:
http 代理地址不可使用 127.0.0.1 ,否则 go get 会报 Connection refused. 错误信息类似如下:

Fetching https://golang.org/x/crypto/ssh?go-get=1
https fetch failed: Get https://golang.org/x/crypto/ssh?go-get=1: proxyconnect tcp: dial tcp 127.0.0.1:1087: connect: connection refused
package golang.org/x/crypto/ssh: unrecognized import path "golang.org/x/crypto/ssh" (https fetch: Get https://golang.org/x/crypto/ssh?go-get=1: proxyconnect tcp: dial tcp 127.0.0.1:1087: connect: connection refused)
Fetching https://golang.org/x/text/encoding/simplifiedchinese?go-get=1
https fetch failed: Get https://golang.org/x/text/encoding/simplifiedchinese?go-get=1: proxyconnect tcp: dial tcp 127.0.0.1:1087: connect: connection refused


正确做法是设置 http 代理服务器的 IP 为 0.0.0.0(mac 上ShadowsocksX-NG可直接界面配置),然后在 docker build 时使用非回环地址 127.0.0.1,而是用本机网卡的 IP。例如
docker build \
--build-arg http_proxy=http://192.168.11.5:1087 \
--build-arg https_proxy=http://192.168.11.5:1087 \
-t comm_mock_svr .

按如上方式,即可正常。

 

另外,附上一篇关于 Docker 走代理该如何配置的好文章:

《Ultimate Guide to Docker HTTP Proxy Configuration》

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值