文章目录
  1. 1. 注意事项一:
  2. 2. 注意事项二:

转载请注明 作者:源码先生, 文章链接:https://www.debugself.com/2018/01/17/docker_network/, 请勿用于商业用途

使用Dockerfile来docker build镜像时,默认使用的bridge网络环境;而RUN等命令经常需要联网下载依赖,由于公司加密软件的限制,造成RUN命令使用bridge时无法联网

于是想到使用host网络应该可以上网,host网络中,docker 容器没有自己的网卡和ip,不使用birdge网络,直接使用本机的网络;只要本机可以上网,docker build时的RUN命令就可以使用网络

https://www.cnblogs.com/atuotuo/p/6926390.html

docker build时使用host网络的方法

1
docker build --network=host -t test .

docker-compose时使用host网络的方法

1
2
3
4
5
6
7
8
9
version: '3.4'
services:
    zlggateway:
    build:
        context: gateway
        network: host
    ports:
      - "80:80"
      - "443:443"

注意:network: host这个指令从yml2.2开始支持(见https://docs.docker.com/compose/compose-file/compose-file-v2/),但是3.0却又不支持,到3.4后又开始支持(见https://docs.docker.com/compose/compose-file/compose-versioning/#version-3 ,注意:3.4对应的docker版本不低于17.09.0),所以需要在yml文件中指定version: ‘3.4’或者version: ‘2.2’

docker run 时使用host网络的方法

1
docker run --network=host  -i -t ubuntu:latest /bin/bash

注意事项一:

docker run 使用的网络和docker build时使用网络,是两个独立的网络,比如docker build时指定了host网络,但是不影响docker run时使用的网络,docker run可以指定自己的网络,如bridge

The network specified in build is only for downloading packages that are necessary for building image. The network specified in run is for the containers itself.

https://forums.docker.com/t/is-docker-build-network-host-working-as-expected/33492/3
https://stackoverflow.com/questions/27435479/pass-net-host-to-docker-build

注意事项二:

docker-compose.yml中的network_mode、networks都不是build时的网络环境

networks用来把容器加入到指定的网络中

network_mode该命令测试无效

https://www.jianshu.com/p/2217cfed29d7
http://blog.csdn.net/gezhonglei2007/article/details/51627969

旧版本中,net对应network_mode https://stackoverflow.com/questions/35960452/docker-compose-running-containers-in-nethost

除了使用Host网络,还有其他不完美的方法,如

通过设置http_proxy代理上网,Dockerfile中添加

1
2
ENV http_proxy http://proxy:8080
ENV https_proxy http://proxy:8080/

经测试npm可以通过代理上网了,但是cnmp,Alpine apk等软件依旧无法联网,该方法暂时没有找到解决办法

http://blog.csdn.net/chang_harry/article/details/53464778
http://dockone.io/question/699

或者

1
docker build --build-arg HTTP_PROXY=http://10.20.30.2:1234 .

https://docs.docker.com/engine/reference/commandline/build/#set-ulimits-in-container-ulimit

总结:http_proxy方法不通用,很多应用上不了网