网络
docker network ls
mac 启动容器,在容器中访问本地网络
例如本地启动了 redis
然后在容器中访问:
| from redis import StrictRedis
redis = StrictRedis(host="host.docker.internal", port=6379, db=0)
redis.set('val', '123')
print(redis.get('val'))
|
linux 的启动容器,并在容器中访问本地网络
本地启动 redis
使用如下命令启动容器:
docker run -ti --rm --network host python:3.6-stretch /bin/sh
设置为 host 网络设置的 docker 容器将与 docker 主机共享网络堆栈,从容器的角度来看, localhost(或127.0.0.1) 将引用 docker 主机。
| from redis import StrictRedis
redis = StrictRedis(host="127.0.0.1", port=6379, db=0)
redis.set('message', '233')
print(redis.get('message'))
|
然后在容器中执行上面的脚本
将新容器放到隔离的网络栈中,但是不进行网络配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | ➜ ~ docker run -ti --rm alpine
/ # ping www.baidu.com
PING www.baidu.com (182.61.200.7): 56 data bytes
64 bytes from 182.61.200.7: seq=0 ttl=53 time=7.160 ms
64 bytes from 182.61.200.7: seq=1 ttl=53 time=5.416 ms
64 bytes from 182.61.200.7: seq=2 ttl=53 time=4.349 ms
➜ ~ docker run -ti --network none --rm alpine
/ # ping www.baidu.com
ping: bad address 'www.baidu.com'
➜ ~ docker run -ti --net=none --rm alpine
/ # ping www.baidu.com
ping: bad address 'www.baidu.com'
➜ ~ docker run -ti --net=host --rm alpine
/ # ping www.baidu.com
PING www.baidu.com (182.61.200.6): 56 data bytes
64 bytes from 182.61.200.6: seq=0 ttl=54 time=4.621 ms
64 bytes from 182.61.200.6: seq=1 ttl=54 time=3.668 ms
64 bytes from 182.61.200.6: seq=2 ttl=54 time=4.951 ms
64 bytes from 182.61.200.6: seq=3 ttl=54 time=3.834 ms
|
使用 host 模式
Docker容器运行的时候有 host 、 bridge 、 none 三种网络可供配置。
默认是 bridge ,即桥接网络,以桥接模式连接到宿主机;
host 是宿主网络,即与宿主机共用网络;
none 则表示无网络,容器将无法联网。
当容器使用 host 网络时,容器与宿主共用网络,这样就能在容器中访问宿主机网络,那么容器的 localhost 就是宿主机的 localhost 。
在某个 service 下进行如下配置