Docker与本地网络连接配置
使用下面命令可以进行本地网络连接配置:
# 将这两句添加到.bashrc中可以在开启终端时默认挂载
export http_proxy=http://127.0.0.1:8123
export https_proxy=http://127.0.0.1:8123
# 测试连通性
curl https://www.google.com
# 取消挂载
unset http_proxy
unset https_proxy
Docker由于其架构的性质,不能直接从容器内及在Dockerfile Build的时候进行proxy访问,以下提供多种方式来进行proxy的配置,其中${HOST MACHINE CURRENT IP} 表示宿主机的物理联网IP。
#方式一 直接在Dockerfile中修改 (不推荐此方式,因为可能影响容器后续启动与移植)
#其中大小写的http_proxy分别对应了不同程序的proxy请求,例如curl请求大写,wget请求小写
ENV https_proxy=http://${HOST MACHINE CURRENT IP}:8123
ENV http_proxy=http://${HOST MACHINE CURRENT IP}:8123
ENV HTTP_PROXY=http://${HOST MACHINE CURRENT IP}:8123
ENV HTTPS_PROXY=http://${HOST MACHINE CURRENT IP}:8123
ENV no_proxy="localhost,localdomain,127.0.0.1,etc"
ENV NO_PROXY="localhost,localdomain,127.0.0.1,etc"
# 在最后加上unset 与清空环境变量
ENV https_proxy ""
ENV http_proxy ""
ENV HTTP_PROXY ""
ENV HTTPS_PROXY ""
ENV no_proxy ""
ENV NO_PROXY ""
RUN unset http_proxy && unset https_proxy
#方式二 在build命令后添加临时变量
docker build (Other Command) \
--network host \ //设置编译时网络模式为host宿主共享模式
--build-arg https_proxy=http://${HOST MACHINE CURRENT IP}:8123 \
--build-arg http_proxy=http://${HOST MACHINE CURRENT IP}:8123 \
--build-arg HTTP_PROXY=http://${HOST MACHINE CURRENT IP}:8123 \
--build-arg HTTPS_PROXY=http://${HOST MACHINE CURRENT IP}:8123 \
--build-arg NO_PROXY="localhost,localdomain,127.0.0.1,etc" \
--build-arg no_proxy="localhost,localdomain,127.0.0.1,etc"
#方式三 Docker中引入了新的方式,在配置文件中添加需要的proxy即可
mkdir ~/.docker
cd ~/.docker
sudo vim config.json
#在config.json中添加参数
{
"proxies":
{
"default":
{
"httpProxy": "http://${HOST MACHINE CURRENT IP}:8123",
"httpsProxy": "http://${HOST MACHINE CURRENT IP}:8123",
"ftpProxy": "http://${HOST MACHINE CURRENT IP}:8123",
"noProxy": "localhost,localdomain,127.0.0.1,etc"
}
}
}
#使用方式一 在build后作为参数添加config.json
--config string "~/.docker"
#使用方式二 将DOCKER_CONFIG作为环境变量添加到其中
export DOCKER_CONFIG=~/.docker
下面是Docker容器内访问宿主网络的方法:
#修改Docker配置
sudo mkdir /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
sudo vim /etc/systemd/system/docker.service.d/https-proxy.conf
#http-proxy.conf内容
[Service]
Environment="HTTP_PROXY=http://${HOST MACHINE CURRENT IP}:8123/" "NO_PROXY=localhost,127.0.0.1"
#http-proxy.conf内容
[Service]
Environment="HTTPS_PROXY=http://${HOST MACHINE CURRENT IP}:8123/" "NO_PROXY=localhost,127.0.0.1"
#修改完成后重启Docker服务
systemctl daemon-reload
systemctl restart docker
#查看Docker是否配置成功
docker info