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/
Hello HELLO!Hostname: f43ed2810353
Visits:cannot connect to Redis, counter disabled
$ curl http://192.168.1.160:4001/
Hello HELLO! Hostname:f43ed2810353
Visits:cannot connect to Redis, counter disabled

可以看到本地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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker 端口映射详细介绍

    Docker 端口映射: 最近抽空,把Docker 端口映射的资料整理了一下,以便后续项目应用,大家也可以参考下. # Find IP address of container with ID <container_id> 通过容器 id 获取 ip $ sudo docker inspect <container_id> | grep IPAddress | cut -d '"' -f 4 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的.此外

  • Docker 网络之端口绑定的方法

    外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射. -P 标记时 Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口. -p 标记时 则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器.支持的格式有 ip:hostPort:containerPort ip::containerPort hostPort:containerPort 映射所有接口地址 使用 hostPort:conta

  • docker容器启动后添加端口映射

    概要 网上有许多人在查找关于容器启动后能否进行端口映射的问题.我曾经也问过度娘,很遗憾我没找到.本文就这个问题给出一个解决方法,旨在抛砖引玉.本文的思路是使用iptables的端口转发,这也是docker端口映射内部的实现机制,只不过我是显示地写出来罢了,为的就是让查找这个问题的人对docker的端口映射有一个直观的了解. 结论:容器启动后是可以添加端口映射的,但不建议手工添加,最好使用docker提供的功能. 步骤 创建两个容器并进行了端口映射,结果如图所示: 假如,我start一个容器,其内

  • Docker端口映射的实现

    docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的. 亦可使用Dockerfile文件中的EXPOSE指令来配置. 端口映射可使用-p.-P来实现: -p指定要映射的端口,一个指定端口上只可以绑定一个容器 -P将容器内部开放的网络端口随机映射到宿主机的一个端口上 端口映射支持的格式: ip:hostport:containerport #指定ip.指定宿主机port.指定容器port ip::containerport #指定ip.未指定

  • Docker端口映射实现网络访问的方法

    Docker运行容器之后却发现没IP,没端口,那要如何访问容器呢? 下面我来介绍下docker通过端口映射来实现网络访问 一.从外部访问容器应用 在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数指定端口映射. 先来说说p和P吧 -p 可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器 -P 它会随机映射一个端口至容器内部开放的网络端口(范围不详,似乎都上万) 先申明

  • docker 动态映射运行的container端口实例详解

    docker动态映射运行的container端口,最近做项目,对于docker动态映射运行的container端口的资料有必要记录下,以便以后在用到, Docker自带了EXPOSE命令,可以通过编写dockerfile加-p参数方便的映射Container内部端口,但是对于已经运行的container,如果你想对外开放一个新的端口,只能编辑dockerfile然后重新build,有点不太方便. 其实docker本身使用了iptables来做端口映射的,所以我们可以通过一些简单的操作来实现动态映

  • Docker 给运行中的容器设置端口映射的方法

    一.概念 Docker 端口映射即映射容器内应用的服务端口到本机宿主机器. 二.实现 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数两种方式来指定端口映射. 1. 随机映射 使用 -P 参数时,Docker 会随机映射一个端口到内部容器开放的网络端口,如下开启一个 nginx 服务: $ docker run -d -P nginx e93349d539119dc48dc841e117f6388d6afa6a6065b75a5b4aedaf5fb2a051fc

  • Docker学习笔记之Docker端口映射

    最近在学习docker,今天了解了Docker端口映射,给自己留个小笔记,也分享给大家 为什么要端口映射? 在启动容器时,如果不配置宿主机器与虚拟机的端口映射,外部程序是无法访问虚拟机的,因为没有端口. 端口映射的指令是什么? docker指令:docker run -p ip:hostPort:containerPort redis 使用-p参数会分配宿主机的端口映射到虚拟机. IP表示主机的IP地址. hostPort表示宿主机的端口. containerPort表示虚拟机的端口. 支持的格

  • 详解Docker 端口映射与容器互联

    1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定端口映射.当使用-P(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口(端口范围在Linux系统使用的端口之外,一般都过万): [root@docker ~]# docker run -d --name nginx_1 -P nginx:latest

  • Docker容器绑定外部IP和端口的方法

    Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务. 以下操作通过myfirstapp镜像模拟,如何制作myfirstapp镜像请点击此处. 1.外部访问容器 容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射. a.用-P(大写)标记时,docker会随机选择一个端口映射到容器内部开放的网络端口上. $ docker run -d -P myfirstapp python app.py $ docker ps CONTAINER ID IMAGE CO

  • Docker容器如何查看ip地址的实现方法

    一直以为Docker是没有IP地址的,其实Docker的网络模板有点类似我们平常使用虚拟机的host-only模式,容器和宿主机组成一个独立的局域网,宿主机的IP为172.17.0.1,对应主机的网络名称为docker0 所以要想看到docker容器的ip地址,只需要安装net-tools就可以了 yum install net-tools -y 之后就可以用ifconfig查看了 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

  • Docker容器通过独立IP暴露给局域网的方法

    Docker容器非常轻量,系统开销非常少,比VMware或者VirtualBox用起来方便,部署起来也非常容易.官方推荐我们通过端口映射的方式把Docker容器的服务提供给宿主机或者局域网其他容器使用.一般过程是: 1.Docker进程通过监听宿主机的某个端口,将该端口的数据包发送给Docker容器 2.宿主机可以打开防火墙让局域网其他设备通过访问宿主机的端口进而访问docker的端口 这里以CDNS为例,CDNS是一个用于避免DNS污染的程序,通过CDNS可以把你的计算机变成一个抗污染的DNS

  • Linux下docker 容器退出bash的两种实现方法

    如果要退出bash有2种操作: 第一种: Ctrl + d 退出并停止容器: 第二种: Ctrl + p + q 退出并在后台运行容器: 补充知识:Docker同时启动多个服务 前几篇Docker的文章介绍启动容器时都是只启动一个后台服务,今天来说说怎样通过supervisor来启动多个服务 1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下 FROM centos:centos6MAINTAINER Fanbin Kong "kongxx@hotmail.com&quo

  • Docker容器迁移Oracle到MySQL的实现方法

    目录 ️ 1. 创建专用网络 ️ 2. Oracle 12C部署 2.1 镜像下载 2.2 容器创建 2.3 创建业务用户 2.4 监听启动 ️ 3. MySQL8部署 3.1 容器创建 3.2 参数设置 3.3 登陆MySQL ️ 4. kettle迁移Oracle到MySQL 4.1 部署kettle 4.2 Oracle端数据校验 4.3 迁移Oracle到MySQL 4.4 迁移后MySQL数据验证 前言 Kettle是开源的 [TEL] 工具,JVAV编写,可以运行在多个平台,使用时有

  • Docker容器与主机间的文件传输方法(复制/上传/下载)

    1.首先启动容器(以first-mysql容器为例) docker start first-mysql 2.查看容器ID root@kobe:/opt/software/temp/test# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 688e83c55129 mysql "docker-entrypoint.s-" 6 days ago Up 3 seconds 0.0.0.0:3306->33

  • Java获取服务器IP及端口的方法实例分析

    本文实例讲述了Java获取服务器IP及端口的方法.分享给大家供大家参考,具体如下: 前几天写过一个获取远程服务器的IP和端口的程序,从网上查了一些资料顺便加一些自己的理解,希望对大家有所帮助: struts2 获取request HttpServletRequest requet=ServletActionContext.getRequest(); requet.getScheme()+"://"+requet.getServerName()+":"+requet.

  • 运行django项目指定IP和端口的方法

    一.django项目启动命令 默认IP和端口 python manage.py runserver 指定端口 python manage.py runserver 192.168.1.50:8080 二.遇到的问题 Invalid HTTP_HOST header: '192.168.1.50'. You may need to add '192.168.1.50' to ALLOWED_HOSTS. 修改settings.py,将192.168.1.50添加到ALLOWED_HOSTS中 AL

  • 详解docker容器分配静态IP

    最近因为工作要求需要用学习使用docker,最后卡在了网络配置这一块.默认情况下启动容器的时候,docker容器使用的是bridge策略比如: docker run -ti ubuntu:latest /bin/bash 等效于 docker run -ti --net=bridge ubuntu:latest /bin/bash bridge策略下,docker容器自动为我们分配了一个IP地址,并连接到docker0的网桥上.但这里有一个问题,这个IP地址并不是静态分配的,这对我们的对容器的实

  • 详解如何解决docker容器无法通过IP访问宿主机问题

    问题起源 在使用 docker 的过程中我不幸需要在 docker 容器中访问宿主机的 80 端口, 而这个 80 端口是另外一个容器 8080 端口映射出去的. 当我在容器里通过 docker 的网桥 172.17.0.1 访问宿主机时, 居然发现: curl: (7) Failed to connect to 172.17.0.1 port 80: No route to host 查找问题原因 可以确定的是容器与宿主机是有网络连接的, 因为可以在容器内部通过 172.17.0.1 Ping

随机推荐