19-07 【docker】随笔笔记

小tips:

1,在nginx的镜像中,并未包含ping工具;

2,在busybox的镜像中,是包含ping工具和telnet工具的,所以如果想测试互通性,可以利用busybox来检查;

 

实验1:利用busybox可以确定,容器和主机的网络是否可以互通。

实验步骤:1,创建busybox容器,然后实验ping结果,实验telnet结果;

docker pull busybox

docker run --it --rm busybox

启动后执行测试,我本地的ip地址是:10.70.74.101

/ # ping 10.70.74.101
PING 10.70.74.101 (10.70.74.101): 56 data bytes
64 bytes from 10.70.74.101: seq=0 ttl=37 time=0.602 ms
64 bytes from 10.70.74.101: seq=1 ttl=37 time=1.099 ms
64 bytes from 10.70.74.101: seq=2 ttl=37 time=1.284 ms
64 bytes from 10.70.74.101: seq=3 ttl=37 time=1.017 ms
^C
--- 10.70.74.101 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.602/1.000/1.284 ms

测试redis的连通性:

/ # telnet 10.70.74.101 6379

quit
+OK
Connection closed by foreign host

可以看到:在容器中是可以联通本地的ip,也可以连通对应的端口号的。如果连通受限,通常是因为应用程序设置的限制。(比如redis是可以设置必须通过某些ip才能访问的,放开后就可以了)

 

2,查看busybox容器的ip,在本地宿主机上实验ping记过,实验telnet结果。

得到容器的ip:

/ # ifconfig | grep inet
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          inet addr:127.0.0.1  Mask:255.0.0.0

  

测试ping:

$ ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
36 bytes from 10.252.206.2: Destination Host Unreachable
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 5400 7efd   0 0000  3d  01 fded 10.70.74.101  172.17.0.2

Request timeout for icmp_seq 2
36 bytes from 10.252.206.2: Destination Host Unreachable
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 5400 5e38   0 0000  3d  01 1eb3 10.70.74.101  172.17.0.2

^C
--- 172.17.0.2 ping statistics ---
4 packets transmitted, 0 packets received, 100.0% packet loss

 

测试telnet:

ping测试失败了,telnet就不用测试了。

 

实验结论:

a,在默认配置下,docker容器可以访问宿主机的ip和端口;

b,在默认配置下,宿主机无法直接ping通容器的ip,也无法telnet通端口号。

 

实验2:docker run的相关参数 

-v参数解释:这个参数是为了能做文件映射。示例:-v [/host/file]:[/docker/file] -v [/host/file2:/host/file2]

-p参数解释:这个参数是为了做端口映射。示例:-p [host-port]:[docker-port]

-i参数解释:这个参数是为了能进入交互式模式

 步骤1:使用busybox启动容器

$ docker run -it --rm busybox
/ # cat /tmp/a.txt
cat: can't open '/tmp/a.txt': No such file or directory

步骤2:使用-v参数启动容器(先在宿主机中创建文件/tmp/a.txt,然后再启动busybox查看是否能访问)

$ docker run -v /tmp:/tmp -it --rm busybox
/ # cat /tmp/a.txt
hello, world!

解释:步骤1中的-it是交互式模式运行,--rm是如果有这个镜像创建的容器则默认删除容器后再次创建,这样保证只有一个相关联的容器在执行,有利于反复测试。

步骤2中的-v参数将宿主机的/tmp映射到容器中的/tmp目录,可以看到宿主机中的/tmp/a.txt。

 

与docker相关的网络工具:

如何把redis的端口开放给其他网络访问:https://www.cnblogs.com/zhangqigao/p/9110544.html

phpunit的文档:http://www.phpunit.cn/manual/current/en/phpunit-book.html

posted on 2019-04-09 16:18  awildfish  阅读(198)  评论(0编辑  收藏  举报

导航