Docker: 网络

165 阅读2分钟

外部访问容器

容器可以运行网络应用, 要让外部可以访问, 可以通过 -P 或 -p 参数来指定端口映射

  • 使用 -P 标记时, Docker会随机映射一个 49000~49900 的端口到内部容器开放的网络端口

  • -p 则可以指定要映射的端口, 在指定端口上只可以绑定一个容器, 格式有:

    ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
    
    # 映射所有接口地址
    # 使用 hostPort:containerPort
    docker run -d -p 5000:5000 training/webapp python app.py
    
    # 映射到指定地址的指定端口
    # 使用 ip:hostPort:containerPort, 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1
    docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
    
    # 映射到指定地址的任意端口
    # 使用 ip::containerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口
    docker run -d -p 127.0.0.1::5000 training/webapp python app.py
    
    # 还可以使用udp 标记来指定 udp 端口
    

查看映射端口配置

  • 使用 docker port 来查看当前映射的端口配置, 也可以查看绑定的地址

    docker port nostalgic_morse 5000
     127.0.0.1:49155
    
    • 注意容器有自己的内部网络和ip地址(使用 docker inspect 可以获取所有的变量,Docker 还可以有一个可变的网络配置。)

    • -p 标记可以多次使用来绑定端口

      docker run -d \
          -p 5000:5000 \
          -p 3000:80 \
          training/webapp \
          python app.py
      

容器互联

新建网络

  • 创建一个新的Docker网络

    docker network create -d bridge my-net
    
    # -d 参数指定Docker网络类型, 有bridge, overlay
    

连接容器

  • 运行容器并连接到新建的 my-net网络

    # 第一个容器
    docker run -it --rm --name busybox1 --network my-net busybox sh
    
    # 第二个容器
    docker run -it --rm --name busybox2 --network my-net busybox sh
    
    
  • 新终端输入命令

    docker container ls
    
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    b47060aca56b        busybox             "sh"                11 minutes ago      Up 11 minutes                           busybox2
    8720575823ec        busybox             "sh"                16 minutes ago      Up 16 minutes                           busybox1
    
    
  • 通过ping 来证明 busybox1容器 和busybox2容器 是否建立联系

    # 在busybox1容器里输入以下命令, 同理busybox2里也是一样使用
    ping busybox2