Skip to content

网络

docker network ls

mac 启动容器,在容器中访问本地网络

例如本地启动了 redis

然后在容器中访问:

1
2
3
4
5
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 主机。

1
2
3
4
5
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 下进行如下配置

1
network_mode: "host"