Docker端口映射與容器互聯

當外部要訪問容器中運行的應用時,可以通過-P或者-p來指定映射的端口。

  • -P:Docker會隨機分配一個端口

  • -p:指定端口

例如:

# docker run -d -P nginx 
cd54a3d0c6895faed4b14cec1b174bce3f7e0b95acd22da9ac36f3e3d25d4f44

# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
cd54a3d0c689        nginx               "nginx -g 'daemon of…"   3 seconds ago       Up 3 seconds        0.0.0.0:32768->80/tcp    youthful_ramanujan
0bc2d24ca043        registry:2          "/entrypoint.sh /etc…"   22 hours ago        Up 6 hours          0.0.0.0:5000->5000/tcp   registry

可以看到本機的32768端口映射到容器的80端口,訪問本機的32768端口

image.png


docker logs 查看應用信息

# docker logs -f cd54a3d0c689 
172.16.0.10 - - [14/Jun/2018:08:06:29 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36" "-"
2018/06/14 08:06:29 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.16.0.10, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "172.16.2.14:32768", referrer: "http://172.16.2.14:32768/"
172.16.0.10 - - [14/Jun/2018:08:06:29 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://172.16.2.14:32768/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36" "-"


映射所有接口地址

docker run -d -p HostPort:ContainerPort nginx

例如:

docker run -d -p 80:80 nginx



映射到指定地址的指定端口

docker run -d -p IP:HostPort:ContainerPort nginx

例如:

docker run -d -p 127.0.0.1:80:80 nginx


映射到指定地址的任意端口

docker run -d -p IP::ContainerPort

即HostPort留空,例如:

docker run -d -p 127.0.0.1::80 nginx


docker port查看當前映射的端口配置

docker port cd54a3d0c689
80/tcp -> 0.0.0.0:32768

80/tcp 是指容器的tcp80端口,0.0.0.0:32768是指本機的所有地址監聽在32768端口



--link: 容器互聯

創建一個mysql容器

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest


創建一個web容器,並將它連接到mysql

docker run -dit --name web --link mysql:mysql busybox


連接到web容器,telnet mysql端口3306,測試是否能通

# docker exec -it web sh
/ # telnet mysql:3306
J
8.0.11  6rmXK*i

可以看到telnet端口是通的

查看/etc/hosts文件

127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.0.4     mysql 6758c7045f5e
192.168.0.6     9d0f9a0f5862

web容器使用容器ID作爲主機名,IP是192.168.0.6 

mysql也使用容器ID作爲主機名,IP是192.168.0.4  






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章