docker容器之間相互訪問
1.查看當(dāng)前的網(wǎng)絡(luò)
Copy
[root@host ~]# docker network ls
NETWORK ID ? ? ? ? ?NAME ? ? ? ? ? ? ? ?DRIVER ? ? ? ? ? ? ?SCOPE
3dd4643bb158 ? ? ? ?bridge ? ? ? ? ? ? ?bridge ? ? ? ? ? ? ?local
748b765aca52 ? ? ? ?host ? ? ? ? ? ? ? ?host ? ? ? ? ? ? ? ?local
4d59a0cd3ff4 ? ? ? ?none ? ? ? ? ? ? ? ?null ? ? ? ? ? ? ? ?local
2.創(chuàng)建一個(gè)bridge的網(wǎng)絡(luò)(如不加參數(shù),默認(rèn)創(chuàng)建的就是bridge類型的網(wǎng)絡(luò))
Copy
[root@host ~]# docker network create my_net
a80ae06b65918f5e653faae643af6dbcbe2f4607053211a0528d24f62e46f649
[root@host ~]# docker network ls
NETWORK ID ? ? ? ? ?NAME ? ? ? ? ? ? ? ?DRIVER ? ? ? ? ? ? ?SCOPE
3dd4643bb158 ? ? ? ?bridge ? ? ? ? ? ? ?bridge ? ? ? ? ? ? ?local
748b765aca52 ? ? ? ?host ? ? ? ? ? ? ? ?host ? ? ? ? ? ? ? ?local
a80ae06b6591 ? ? ? ?my_net ? ? ? ? ? ? ?bridge ? ? ? ? ? ? ?local
4d59a0cd3ff4 ? ? ? ?none ? ? ? ? ? ? ? ?null ? ? ? ? ? ? ? ?local
3.查看該網(wǎng)絡(luò)的詳細(xì)信息
Copy
[root@host ~]# docker network inspect my_net
[
? ? {
? ? ? ? "Name": "my_net",
? ? ? ? "Id": "a80ae06b65918f5e653faae643af6dbcbe2f4607053211a0528d24f62e46f649",
? ? ? ? "Scope": "local",
? ? ? ? "Driver": "bridge",
? ? ? ? "EnableIPv6": false,
? ? ? ? "IPAM": {
? ? ? ? ? ? "Driver": "default",
? ? ? ? ? ? "Options": {},
? ? ? ? ? ? "Config": [
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "Subnet": "172.18.0.0/16",
? ? ? ? ? ? ? ? ? ? "Gateway": "172.18.0.1/16"
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ]
? ? ? ? },
? ? ? ? "Internal": false,
? ? ? ? "Containers": {},
? ? ? ? "Options": {},
? ? ? ? "Labels": {}
? ? }
]
4.啟動(dòng)容器時(shí)指定網(wǎng)絡(luò)
注:需要使用–name為容器指定一個(gè)名字
Copy
[root@host ~]# docker run --name boot1 -d --network my_net bbacc5de5941
7ca3834887355e3ecb4a2ae484694c2dbc0944f12e23498fd4b03237c4c35632
5.將已啟動(dòng)的應(yīng)用連接至網(wǎng)絡(luò)
注:需要使用–name為容器指定一個(gè)名字
Copy
[root@host ~]# docker run --name boot2 -d b8ea3d603e18
d281bfeb900325724968ec89f7e4623f9add844d101cf4773f3b14c36253f301
[root@host ~]# docker network connect my_net boot2
6.再啟動(dòng)一個(gè)centos7容器,同時(shí)連接到該網(wǎng)絡(luò)
Copy
[root@host ~]# docker run -it --name my_centos --network my_net centos:7
[root@b4f27e7db4c0 /]
7.在centos7容器中訪問另外的兩個(gè)容器。
注:這里boot1、boot2是兩個(gè)spring-boot項(xiàng)目,端口均為8080。
Copy
[root@b4f27e7db4c0 /]# ping -c 4 boot1
PING boot1 (172.18.0.2) 56(84) bytes of data.
64 bytes from boot1.my_net (172.18.0.2): icmp_seq=1 ttl=64 time=0.055 ms
64 bytes from boot1.my_net (172.18.0.2): icmp_seq=2 ttl=64 time=0.089 ms
64 bytes from boot1.my_net (172.18.0.2): icmp_seq=3 ttl=64 time=0.097 ms
64 bytes from boot1.my_net (172.18.0.2): icmp_seq=4 ttl=64 time=0.084 ms
--- boot1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3111ms
rtt min/avg/max/mdev = 0.055/0.081/0.097/0.017 ms
[root@b4f27e7db4c0 /]# ping -c 4 boot2
PING boot2 (172.18.0.3) 56(84) bytes of data.
64 bytes from boot2.my_net (172.18.0.3): icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from boot2.my_net (172.18.0.3): icmp_seq=2 ttl=64 time=0.090 ms
64 bytes from boot2.my_net (172.18.0.3): icmp_seq=3 ttl=64 time=0.078 ms
64 bytes from boot2.my_net (172.18.0.3): icmp_seq=4 ttl=64 time=0.101 ms
--- boot2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3085ms
rtt min/avg/max/mdev = 0.065/0.083/0.101/0.016 ms
[root@b4f27e7db4c0 /]# curl http://boot1:8080/
Hello Docker World[root@b4f27e7db4c0 /]#
[root@b4f27e7db4c0 /]# curl http://boot2:8080/
Hello Docker helloaaasdfasdf[root@b4f27e7db4c0 /]#
[root@b4f27e7db4c0 /]#
8.查看網(wǎng)絡(luò)詳細(xì)信息
注:按組合鍵ctrl+P+Q退出my_centos容器
Copy
[root@b4f27e7db4c0 /]# [root@host ~]#
[root@host ~]# docker network inspect my_net
[
? ? {
? ? ? ? "Name": "my_net",
? ? ? ? "Id": "a80ae06b65918f5e653faae643af6dbcbe2f4607053211a0528d24f62e46f649",
? ? ? ? "Scope": "local",
? ? ? ? "Driver": "bridge",
? ? ? ? "EnableIPv6": false,
? ? ? ? "IPAM": {
? ? ? ? ? ? "Driver": "default",
? ? ? ? ? ? "Options": {},
? ? ? ? ? ? "Config": [
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? "Subnet": "172.18.0.0/16",
? ? ? ? ? ? ? ? ? ? "Gateway": "172.18.0.1/16"
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ]
? ? ? ? },
? ? ? ? "Internal": false,
? ? ? ? "Containers": {
? ? ? ? ? ? "7ca3834887355e3ecb4a2ae484694c2dbc0944f12e23498fd4b03237c4c35632": {
? ? ? ? ? ? ? ? "Name": "boot1",
? ? ? ? ? ? ? ? "EndpointID": "10a5dad08d25fb5fbefdf3240b8b94edcf76e6e40ef8f1bb8fe029d288338e75",
? ? ? ? ? ? ? ? "MacAddress": "02:42:ac:12:00:02",
? ? ? ? ? ? ? ? "IPv4Address": "172.18.0.2/16",
? ? ? ? ? ? ? ? "IPv6Address": ""
? ? ? ? ? ? },
? ? ? ? ? ? "b4f27e7db4c01105ec2d59b34cf7971929d4c8563c3d3c4b6ff8bb61d031fe34": {
? ? ? ? ? ? ? ? "Name": "my_centos",
? ? ? ? ? ? ? ? "EndpointID": "9cbb7f1c9747787e70c0f94cc4924c987b084553426fbfa2b62713c178614498",
? ? ? ? ? ? ? ? "MacAddress": "02:42:ac:12:00:04",
? ? ? ? ? ? ? ? "IPv4Address": "172.18.0.4/16",
? ? ? ? ? ? ? ? "IPv6Address": ""
? ? ? ? ? ? },
? ? ? ? ? ? "d281bfeb900325724968ec89f7e4623f9add844d101cf4773f3b14c36253f301": {
? ? ? ? ? ? ? ? "Name": "boot2",
? ? ? ? ? ? ? ? "EndpointID": "19b58907f5209b98f316c83dddba08c0eacc38a677162767250dbdf4fbb9f3fa",
? ? ? ? ? ? ? ? "MacAddress": "02:42:ac:12:00:03",
? ? ? ? ? ? ? ? "IPv4Address": "172.18.0.3/16",
? ? ? ? ? ? ? ? "IPv6Address": ""
? ? ? ? ? ? }
? ? ? ? },
? ? ? ? "Options": {},
? ? ? ? "Labels": {}
? ? }
]
[root@host ~]#
docker啟動(dòng)時(shí)指定--network=host或-net=host,如果還指定了-p映射端口,那這個(gè)時(shí)候就會(huì)有此警告,
并且通過-p設(shè)置的參數(shù)將不會(huì)起到任何作用,端口號(hào)會(huì)以主機(jī)端口號(hào)為主,重復(fù)時(shí)則遞增。也就是他會(huì)直接使用宿主機(jī)的端口,設(shè)置端口映射會(huì)失效,也就是直接使用默認(rèn)啟動(dòng)端口,假設(shè)多個(gè),他就會(huì)讓端口遞增,比如第一個(gè)tomcat是8080,第二個(gè)就是8081,所以在使用host模式的時(shí)候不需要指定端口映射
?
啟動(dòng)web服務(wù)只能本地localhost訪問無法從外部訪問
現(xiàn)象
java springboot項(xiàng)目啟動(dòng)后,localhost(或127.0.0.1)加端口可以訪問,但是使用外網(wǎng)IP卻無法訪問。
原因及解決方法
springboot 的配置文件(yml 或 properties) 中缺少 server.address 的設(shè)置。
解決方法:
在springboot 的配置文件中增加 server.address 的配置。yml 配置文件如下所示:
server.address 用于指定server綁定的地址。
規(guī)則1:
server.address 為對(duì)應(yīng)機(jī)器ip地址時(shí) ,如 101.12.x.x
此時(shí)訪問該服務(wù)只能使用 ip 訪問 。
規(guī)則2:
server.address 配置為0.0.0.0
在服務(wù)器中,0.0.0.0并不是一個(gè)真實(shí)的的IP地址,它表示本機(jī)中所有的IPV4地址。監(jiān)聽0.0.0.0的端口,就是監(jiān)聽本機(jī)中所有IP的端口。如果想讓springboot 應(yīng)用通過外網(wǎng)ip可以訪問,一般情況,將server.address 配置為 0.0.0.0 即可。文章來源:http://www.zghlxwxcb.cn/news/detail-498379.html
一般源碼里面都是指定本機(jī)網(wǎng)絡(luò)的,要開發(fā)改成0.0.0.0,匹配所有ip地址
?文章來源地址http://www.zghlxwxcb.cn/news/detail-498379.html
到了這里,關(guān)于解決docker容器之間網(wǎng)絡(luò)互通 啟動(dòng)web服務(wù)只能本地localhost訪問無法從外部訪問的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!