zoukankan      html  css  js  c++  java
  • Docker容器绑定外部IP和端口

    Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。

    以下操作通过myfirstapp镜像模拟,如何制作myfirstapp镜像请点击此处

    1、外部访问容器
    容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射。
    a、用-P(大写)标记时,docker会随机选择一个端口映射到容器内部开放的网络端口上。

    $ docker run -d -P myfirstapp python app.py 
    $ docker ps
    CONTAINER ID  IMAGE       COMMAND  CREATED      STATUS                           PORTS             NAMES
    dbcf5d3290ba  myfirstapp  "python app.py"     4 seconds ago  Up 4 seconds  0.0.0.0:32770->80/tcp   quizzical_engelbart  

    此时访问本机的32770端口就可以访问到容器内web应用提供的界面。

    $ curl http://192.168.1.160:32770/
    <h3>Hello HELLO!</h3><b>Hostname:</b> dbcf5d3290ba<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

    也可以使用docker logs来查看应用的信息

    $ docker logs dbcf5d3290ba
    * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
    192.168.1.5 - - [29/Mar/2018 06:17:34] "GET / HTTP/1.1" 200 -
    192.168.1.5 - - [29/Mar/2018 06:17:34] "GET /favicon.ico HTTP/1.1" 404 -
    192.168.1.160 - - [29/Mar/2018 06:17:43] "GET / HTTP/1.1" 200 -
    192.168.1.5 - - [29/Mar/2018 06:18:59] "GET / HTTP/1.1" 200 -

    b、使用-p(小写)标记时则可以指定要映射的端口,并且在一个指定端口上只可以绑定一个容器,支持的格式有:

    ip:hostport:containerport 
    ip::containerport 
    hostport:containerport
    
    $ docker run -d -p 4000:80 myfirstapp python app.py
    $ docker run -d -p 4001:80 myfirstapp python app.py
    $ curl http://192.168.1.160:4000/
    <h3>Hello HELLO!</h3><b>Hostname:</b> f43ed2810353<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i> 
    $ curl http://192.168.1.160:4001/
    <h3>Hello HELLO!</h3><b>Hostname:</b> f43ed2810353<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i> 

    可以看到本地4000端口已经被映射,换一个端口4001也被映射。

    docker默认会映射本地所有的地址。现在我们来尝试一下映射到指定地址的指定端口

    $ docker run -d -p 127.0.0.1:4000:80 myfirstapp python app.py
    $ curl http://127.0.0.1:4000/ ##访问通过
    $ curl http://localhost:4000/ ##访问通过
    $ curl http://192.168.1.160:4000/ ##访问拒绝
    curl: (7) Failed connect to 192.168.1.160:4000; 拒绝连接

    然后要访问容器中的应用只能通过127.0.0.1这个ip访问。

    接下来是绑定本机的任意端口到容器的80端口,随机分配一个端口

    $ docker run -d -p 127.0.0.1::80 myfirstapp python app.py
    $ docker ps ##127.0.0.1:32770->80/tcp
    $ curl http://127.0.0.1:32770/ ##访问通过
    $ curl http://localhost:32770/ ##访问通过
    $ curl http://192.168.1.160:32770/ ##访问拒绝 


    还可以指定通信协议

    docker run -d -p 5003:80/udp myfirstapp python app.py

    2.查看容器绑定和映射的端口及Ip地址

    $ docker port 44de1b0b5312(容器ID)
    80/tcp -> 127.0.0.1:32770

    3.注意事项
    a.docker inspect查看容器自己的内部网络和ip地址

    $ docker inspect 44de1b0b5312(容器ID)

    b.容器启动绑定多IP

    $ docker run -d -p 5005:5000 -p 5006:80 myfirstapp python app.py #容器ID:44e703c1279a
    $ docker port 44e703c1279a
    5000/tcp -> 0.0.0.0:5005
    80/tcp -> 0.0.0.0:5006
  • 相关阅读:
    Path Sum II
    Convert Sorted Array to Binary Search Tree
    Construct Binary Tree from Inorder and Postorder Traversal
    Construct Binary Tree from Preorder and Inorder Traversal
    Maximum Depth of Binary Tree
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Same Tree
    Validate Binary Search Tree
    Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/linjiqin/p/8670798.html
Copyright © 2011-2022 走看看