精华内容
下载资源
问答
  • freeswitch 修改内部外部端口号5060/5080

    千次阅读 2019-08-15 15:29:47
    vi /usr/local/freeswitch/...5060是内部端口,5080是外部端口 <X-PRE-PROCESS cmd="set" data="internal_auth_calls=true"/> <X-PRE-PROCESS cmd="set" data="internal_sip_port=5060"/> <X...

    vi /usr/local/freeswitch/conf/vars.xml

    5060是内部端口,5080是外部端口

     <X-PRE-PROCESS cmd="set" data="internal_auth_calls=true"/>
      <X-PRE-PROCESS cmd="set" data="internal_sip_port=5060"/>
      <X-PRE-PROCESS cmd="set" data="internal_tls_port=5061"/>
      <X-PRE-PROCESS cmd="set" data="internal_ssl_enable=false"/>
    
      <!-- External SIP Profile -->
      <X-PRE-PROCESS cmd="set" data="external_auth_calls=false"/>
      <X-PRE-PROCESS cmd="set" data="external_sip_port=5080"/>
      <X-PRE-PROCESS cmd="set" data="external_tls_port=5081"/>
      <X-PRE-PROCESS cmd="set" data="external_ssl_enable=false"/

     

    展开全文
  • Docker容器内部端口映射到外部宿主机端口 Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。 容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射。 注意: 宿主机的一个...

    Docker容器内部端口映射到外部宿主机端口

     

    Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。
    容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射。

    注意:
    宿主机的一个端口只能映射到容器内部的某一个端口上,比如:8080->80之后,就不能8080->81
    容器内部的某个端口可以被宿主机的多个端口映射,比如:8080->80,8090->80,8099->80

    1)启动容器时,选择一个端口映射到容器内部开放端口上
    -p   小写p表示docker会选择一个具体的宿主机端口映射到容器内部开放的网络端口上。
    -P   大写P表示docker会随机选择一个宿主机端口映射到容器内部开放的网络端口上。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    比如:

    [root@docker-test ~]# docker run -ti -d --name my-nginx -p 8088:80 docker.io/nginx

    2218c7d88ccc917fd0aa0ec24e6d81667eb588f491d3730deb09289dcf6b8125

    [root@docker-test ~]# docker run -ti -d --name my-nginx2 -P docker.io/nginx

    589237ceec9d5d1de045a5395c0d4b519acf54e8c09afb07af49de1b06d71059

    [root@docker-test ~]# docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                   NAMES

    589237ceec9d        docker.io/nginx     "nginx -g 'daemon ..."   6 seconds ago        Up 5 seconds        0.0.0.0:32770->80/tcp   my-nginx2

    2218c7d88ccc        docker.io/nginx     "nginx -g 'daemon ..."   About a minute ago   Up About a minute   0.0.0.0:8088->80/tcp    my-nginx

     

    由上面可知:

    容器my-nginx启动时使用了-p,选择宿主机具体的8088端口映射到容器内部的80端口上了,访问http://localhost/8088即可

    容器my-nginx2启动时使用了-P,选择宿主机的一个随机端口映射到容器内部的80端口上了,这里随机端口是32770,访问http://localhost/32770即可

    2)启动创建时,绑定外部的ip和端口(宿主机ip是192.168.10.214)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    [root@docker-test ~]# docker run -ti -d --name my-nginx3 -p 127.0.0.1:8888:80 docker.io/nginx 

    debca5ec7dbb770ca307b06309b0e24b81b6bf689cb11474ec1ba187f4d7802c

    [root@docker-test ~]# docker run -ti -d --name my-nginx4 -p 192.168.10.214:9999:80 docker.io/nginx              

    ba72a93196f7e55020105b90a51d2203f9cc4d09882e7848ff72f9c43d81852a

    [root@docker-test ~]# docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES

    ba72a93196f7        docker.io/nginx     "nginx -g 'daemon ..."   2 seconds ago       Up 1 second         192.168.10.214:9999->80/tcp   my-nginx4

    debca5ec7dbb        docker.io/nginx     "nginx -g 'daemon ..."   3 minutes ago       Up 3 minutes        127.0.0.1:8888->80/tcp        my-nginx3

     

    由上面可知:

    容器my-nginx3绑定的宿主机外部ip是127.0.0.1,端口是8888,则访问http://127.0.0.1:8888或http://localhost:8888都可以,访问http://192.168.10.214:8888就会拒绝!

    容器my-nginx4绑定的宿主机外部ip是192.168.10.214,端口是9999,则访问http://192.168.10.214:9999就可以,访问http://127.0.0.1:9999或http://localhost:9999就会拒绝!

    3)容器启动时可以指定通信协议,比如tcp、udp

    1

    2

    3

    4

    5

    6

    7

    8

    [root@docker-test ~]# docker run -ti -d --name my-nginx5 -p 8099:80/tcp docker.io/nginx

    c08eb29e3c0a46386319b475cc95245ccfbf106ed80b1f75d104f8f05d0d0b3e

    [root@docker-test ~]# docker run -ti -d --name my-nginx6 -p 192.168.10.214:8077:80/udp docker.io/nginx

    992a48cbd3ef0e568b45c164c22a00389622c2b49e77f936bc0f980718590d5b

    [root@docker-test ~]# docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                 NAMES

    992a48cbd3ef        docker.io/nginx     "nginx -g 'daemon ..."   3 seconds ago       Up 2 seconds        80/tcp, 192.168.10.214:8077->80/udp   my-nginx6

    c08eb29e3c0a        docker.io/nginx     "nginx -g 'daemon ..."   53 seconds ago      Up 51 seconds       0.0.0.0:8099->80/tcp                  my-nginx5

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

    1

    2

    3

    4

    5

    6

    [root@docker-test ~]# docker port my-nginx5

    80/tcp -> 0.0.0.0:8099

    [root@docker-test ~]# docker inspect my-nginx5|grep IPAddress

                "SecondaryIPAddresses": null,

                "IPAddress""172.17.0.6",

                        "IPAddress""172.17.0.6",

    5)容器启动绑定多IP和端口(跟多个-p)

    1

    2

    3

    4

    5

    [root@docker-test ~]# docker run -ti -d --name my-nginx8 -p 192.168.10.214:7777:80 -p 127.0.0.1:7788:80 docker.io/nginx

    0e86be91026d1601b77b52c346c44a31512138cedc7f21451e996dd2e75d014d

    [root@docker-test ~]# docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                 NAMES

    0e86be91026d        docker.io/nginx     "nginx -g 'daemon ..."   17 seconds ago      Up 15 seconds       127.0.0.1:7788->80/tcp, 192.168.10.214:7777->80/tcp   my-nginx8

    6)容器除了在启动时添加端口映射关系,还可以通过宿主机的iptables进行nat转发,将宿主机的端口映射到容器的内部端口上,这种方式适用于容器启动时没有指定端口映射的情况!

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    [root@docker-test ~]# docker run -ti -d --name my-nginx9 docker.io/nginx

    990752e39d75b977cbff5a944247366662211ce43d16843a452a5697ddded12f

    [root@docker-test ~]# docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS            NAMES

    990752e39d75        docker.io/nginx     "nginx -g 'daemon ..."   2 seconds ago       Up 1 second         80/tcp           my-nginx9

     

    这个时候,由于容器my-nginx9在启动时没有指定其内部的80端口映射到宿主机的端口上,所以默认是没法访问的!

    现在通过宿主机的iptables进行net转发

     

    首先获得容器的ip地址

    [root@docker-test ~]# docker inspect my-nginx9|grep IPAddress

                "SecondaryIPAddresses": null,

                "IPAddress""172.17.0.9",

                        "IPAddress""172.17.0.9",

     

    [root@docker-test ~]# ping 172.17.0.9

    PING 172.17.0.9 (172.17.0.9) 56(84) bytes of data.

    64 bytes from 172.17.0.9: icmp_seq=1 ttl=64 time=0.105 ms

    64 bytes from 172.17.0.9: icmp_seq=2 ttl=64 time=0.061 ms

    .....

     

    [root@docker-test ~]# telnet 172.17.0.9 80

    Trying 172.17.0.9...

    Connected to 172.17.0.9.

    Escape character is '^]'

     

     

    centos7下部署iptables环境纪录(关闭默认的firewalle)

    参考:http://www.cnblogs.com/kevingrace/p/5799210.html

     

    将容器的80端口映射到dockers宿主机的9998端口

    [root@docker-test ~]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 9998 -j DNAT --to-destination 172.17.0.9:80

    [root@docker-test ~]# iptables -t nat -A POSTROUTING -d 172.17.0.9/32 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.16.10.214

    [root@docker-test ~]# iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 9998 -j ACCEPT

     

    保存以上iptables规则

    [root@docker-test ~]# iptables-save > /etc/sysconfig/iptables

     

    查看/etc/sysconfig/iptables文件,注意下面两行有关icmp-host-prohibited的设置一定要注释掉!否则nat转发会失败!

    [root@docker-test ~]# cat /etc/sysconfig/iptables

    # Generated by iptables-save v1.4.21 on Fri Aug 10 11:13:57 2018

    *nat

    :PREROUTING ACCEPT [32:1280]

    :INPUT ACCEPT [0:0]

    :OUTPUT ACCEPT [0:0]

    :POSTROUTING ACCEPT [0:0]

    -A PREROUTING -p tcp -m tcp --dport 9998 -j DNAT --to-destination 172.17.0.9:80

    -A POSTROUTING -d 172.17.0.9/32 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.16.10.214

    COMMIT

    # Completed on Fri Aug 10 11:13:57 2018

    # Generated by iptables-save v1.4.21 on Fri Aug 10 11:13:57 2018

    *filter

    :INPUT ACCEPT [0:0]

    :FORWARD ACCEPT [0:0]

    :OUTPUT ACCEPT [50:5056]

    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    -A INPUT -p icmp -j ACCEPT

    -A INPUT -i lo -j ACCEPT

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 9998 -j ACCEPT

    #-A INPUT -j REJECT --reject-with icmp-host-prohibited

    #-A FORWARD -j REJECT --reject-with icmp-host-prohibited

    COMMIT

    # Completed on Fri Aug 10 11:13:57 2018

     

    最后重启iptbales服务

    [root@docker-test ~]# systemctl restart iptables

     

    查看iptables规则

    [root@docker-test ~]# iptables -L

    Chain INPUT (policy ACCEPT)

    target     prot opt source               destination        

    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED

    ACCEPT     icmp --  anywhere             anywhere           

    ACCEPT     all  --  anywhere             anywhere           

    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh

    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:distinct32

     

    Chain FORWARD (policy ACCEPT)

    target     prot opt source               destination        

     

    Chain OUTPUT (policy ACCEPT)

    target     prot opt source               destination       

     

    [root@docker-test ~]# iptables -L -t nat

    Chain PREROUTING (policy ACCEPT)

    target     prot opt source               destination        

    DNAT       tcp  --  anywhere             anywhere             tcp dpt:distinct32 to:172.17.0.9:80

     

    Chain INPUT (policy ACCEPT)

    target     prot opt source               destination        

     

    Chain OUTPUT (policy ACCEPT)

    target     prot opt source               destination        

     

    Chain POSTROUTING (policy ACCEPT)

    target     prot opt source               destination        

    SNAT       tcp  --  anywhere             172.17.0.9           tcp spt:http to:192.16.10.214

     

    然后访问http://192.168.10.214:9998/,就能转发访问到my-nginx9容器的80端口了!!! 

    一次性删除所有容器,包括正在运行的容器

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    [root@docker-test ~]# docker rm -f `docker ps -a -q`

    990752e39d75

    0e86be91026d

    ff2bc46a8ee4

    c08eb29e3c0a

    ba72a93196f7

    debca5ec7dbb

    589237ceec9d

    2218c7d88ccc

    [root@docker-test ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

    如果启动docker 容器时,有如下报错:
    /usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint my-nginx (db5a0edac68d1ea7ccaa3a1e0db31ebdf278076ef4851ee4250221af6167f9ac): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8088 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.

    解决办法

    1

    2

    3

    4

    1)不需要关闭防火墙

    2)重启docker服务:systemctl restart docker

    3)docker服务重启后,所有容器都会关闭,应立即批量启动全部容器:docker start `docker ps -a -q`

       启动的容器也会包括上面报错的容器,重启docker后,该容器就能正常启动和使用了!

    ============问题:  Docker 端口映射到宿主机后, 外部无法访问对应宿主机端口==============

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    创建docker容器的时候,做了端口映射到宿主机, 防火墙已关闭, 但是外部始终无法访问宿主机端口?

    这种情况基本就是因为宿主机没有开启ip转发功能,从而导致外部网络访问宿主机对应端口是没能转发到 Docker Container 所对应的端口上。

     

    解决办法:

    Linux 发行版默认情况下是不开启 ip 转发功能的。这是一个好的做法,因为大多数人是用不到 ip 转发的,但是如果架设一个 Linux 路由或者VPN服务我们就需要开启该服务了。

     

    在 Linux 中开启 ip 转发的内核参数为:net.ipv4.ip_forward,查看是否开启 ip转发:

    # cat /proc/sys/net/ipv4/ip_forward           // 0:未开启,1:已开启

     

    ==============================

    打开ip转发功能, 下面两种方法都是临时打开ip转发功能!

    # echo 1 > /proc/sys/net/ipv4/ip_forward

    # sysctl -w net.ipv4.ip_forward=1

     

    ==============================

    永久生效的ip转发

    # vim /etc/sysctl.conf

    net.ipv4.ip_forward = 1

     

    # sysctl -p /etc/sysctl.conf      // 立即生效

     

    Linux 系统中也可以通过重启网卡来立即生效 (修改sysctl.conf文件后的生效)

    # service network restart                  //CentOS 6

    # systemctl restart network              //CentOS 7

    展开全文
  • 注意:宿主机的一个端口只能映射到容器内部的某一个端口上,比如:8080->80之后,就不能8080->81 容器内部的某个端口可以被宿主机的多个端口映射,比如:8080->80,8090->80,8099->80 1...

    Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。
    容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射。

    注意:
    宿主机的一个端口只能映射到容器内部的某一个端口上,比如:8080->80之后,就不能8080->81
    容器内部的某个端口可以被宿主机的多个端口映射,比如:8080->80,8090->80,8099->80

    1)启动容器时,选择一个端口映射到容器内部开放端口上
    -p   小写p表示docker会选择一个具体的宿主机端口映射到容器内部开放的网络端口上。
    -P   大写P表示docker会随机选择一个宿主机端口映射到容器内部开放的网络端口上。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    比如:

    [root@docker-test ~]# docker run -ti -d --name my-nginx -p 8088:80 docker.io/nginx

    2218c7d88ccc917fd0aa0ec24e6d81667eb588f491d3730deb09289dcf6b8125

    [root@docker-test ~]# docker run -ti -d --name my-nginx2 -P docker.io/nginx

    589237ceec9d5d1de045a5395c0d4b519acf54e8c09afb07af49de1b06d71059

    [root@docker-test ~]# docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                   NAMES

    589237ceec9d        docker.io/nginx     "nginx -g 'daemon ..."   6 seconds ago        Up 5 seconds        0.0.0.0:32770->80/tcp   my-nginx2

    2218c7d88ccc        docker.io/nginx     "nginx -g 'daemon ..."   About a minute ago   Up About a minute   0.0.0.0:8088->80/tcp    my-nginx

     

    由上面可知:

    容器my-nginx启动时使用了-p,选择宿主机具体的8088端口映射到容器内部的80端口上了,访问http://localhost/8088即可

    容器my-nginx2启动时使用了-P,选择宿主机的一个随机端口映射到容器内部的80端口上了,这里随机端口是32770,访问http://localhost/32770即可

    2)启动创建时,绑定外部的ip和端口(宿主机ip是192.168.10.214)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    [root@docker-test ~]# docker run -ti -d --name my-nginx3 -p 127.0.0.1:8888:80 docker.io/nginx 

    debca5ec7dbb770ca307b06309b0e24b81b6bf689cb11474ec1ba187f4d7802c

    [root@docker-test ~]# docker run -ti -d --name my-nginx4 -p 192.168.10.214:9999:80 docker.io/nginx              

    ba72a93196f7e55020105b90a51d2203f9cc4d09882e7848ff72f9c43d81852a

    [root@docker-test ~]# docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES

    ba72a93196f7        docker.io/nginx     "nginx -g 'daemon ..."   2 seconds ago       Up 1 second         192.168.10.214:9999->80/tcp   my-nginx4

    debca5ec7dbb        docker.io/nginx     "nginx -g 'daemon ..."   3 minutes ago       Up 3 minutes        127.0.0.1:8888->80/tcp        my-nginx3

     

    由上面可知:

    容器my-nginx3绑定的宿主机外部ip是127.0.0.1,端口是8888,则访问http://127.0.0.1:8888或http://localhost:8888都可以,访问http://192.168.10.214:8888就会拒绝!

    容器my-nginx4绑定的宿主机外部ip是192.168.10.214,端口是9999,则访问http://192.168.10.214:9999就可以,访问http://127.0.0.1:9999或http://localhost:9999就会拒绝!

    3)容器启动时可以指定通信协议,比如tcp、udp

    1

    2

    3

    4

    5

    6

    7

    8

    [root@docker-test ~]# docker run -ti -d --name my-nginx5 -p 8099:80/tcp docker.io/nginx

    c08eb29e3c0a46386319b475cc95245ccfbf106ed80b1f75d104f8f05d0d0b3e

    [root@docker-test ~]# docker run -ti -d --name my-nginx6 -p 192.168.10.214:8077:80/udp docker.io/nginx

    992a48cbd3ef0e568b45c164c22a00389622c2b49e77f936bc0f980718590d5b

    [root@docker-test ~]# docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                 NAMES

    992a48cbd3ef        docker.io/nginx     "nginx -g 'daemon ..."   3 seconds ago       Up 2 seconds        80/tcp, 192.168.10.214:8077->80/udp   my-nginx6

    c08eb29e3c0a        docker.io/nginx     "nginx -g 'daemon ..."   53 seconds ago      Up 51 seconds       0.0.0.0:8099->80/tcp                  my-nginx5

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

    1

    2

    3

    4

    5

    6

    [root@docker-test ~]# docker port my-nginx5

    80/tcp -> 0.0.0.0:8099

    [root@docker-test ~]# docker inspect my-nginx5|grep IPAddress

                "SecondaryIPAddresses": null,

                "IPAddress""172.17.0.6",

                        "IPAddress""172.17.0.6",

    5)容器启动绑定多IP和端口(跟多个-p)

    1

    2

    3

    4

    5

    [root@docker-test ~]# docker run -ti -d --name my-nginx8 -p 192.168.10.214:7777:80 -p 127.0.0.1:7788:80 docker.io/nginx

    0e86be91026d1601b77b52c346c44a31512138cedc7f21451e996dd2e75d014d

    [root@docker-test ~]# docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                 NAMES

    0e86be91026d        docker.io/nginx     "nginx -g 'daemon ..."   17 seconds ago      Up 15 seconds       127.0.0.1:7788->80/tcp, 192.168.10.214:7777->80/tcp   my-nginx8

    6)容器除了在启动时添加端口映射关系,还可以通过宿主机的iptables进行nat转发,将宿主机的端口映射到容器的内部端口上,这种方式适用于容器启动时没有指定端口映射的情况!

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    [root@docker-test ~]# docker run -ti -d --name my-nginx9 docker.io/nginx

    990752e39d75b977cbff5a944247366662211ce43d16843a452a5697ddded12f

    [root@docker-test ~]# docker ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS            NAMES

    990752e39d75        docker.io/nginx     "nginx -g 'daemon ..."   2 seconds ago       Up 1 second         80/tcp           my-nginx9

     

    这个时候,由于容器my-nginx9在启动时没有指定其内部的80端口映射到宿主机的端口上,所以默认是没法访问的!

    现在通过宿主机的iptables进行net转发

     

    首先获得容器的ip地址

    [root@docker-test ~]# docker inspect my-nginx9|grep IPAddress

                "SecondaryIPAddresses": null,

                "IPAddress""172.17.0.9",

                        "IPAddress""172.17.0.9",

     

    [root@docker-test ~]# ping 172.17.0.9

    PING 172.17.0.9 (172.17.0.9) 56(84) bytes of data.

    64 bytes from 172.17.0.9: icmp_seq=1 ttl=64 time=0.105 ms

    64 bytes from 172.17.0.9: icmp_seq=2 ttl=64 time=0.061 ms

    .....

     

    [root@docker-test ~]# telnet 172.17.0.9 80

    Trying 172.17.0.9...

    Connected to 172.17.0.9.

    Escape character is '^]'

     

     

    centos7下部署iptables环境纪录(关闭默认的firewalle)

    参考:http://www.cnblogs.com/kevingrace/p/5799210.html

     

    将容器的80端口映射到dockers宿主机的9998端口

    [root@docker-test ~]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 9998 -j DNAT --to-destination 172.17.0.9:80

    [root@docker-test ~]# iptables -t nat -A POSTROUTING -d 172.17.0.9/32 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.16.10.214

    [root@docker-test ~]# iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 9998 -j ACCEPT

     

    保存以上iptables规则

    [root@docker-test ~]# iptables-save > /etc/sysconfig/iptables

     

    查看/etc/sysconfig/iptables文件,注意下面两行有关icmp-host-prohibited的设置一定要注释掉!否则nat转发会失败!

    [root@docker-test ~]# cat /etc/sysconfig/iptables

    # Generated by iptables-save v1.4.21 on Fri Aug 10 11:13:57 2018

    *nat

    :PREROUTING ACCEPT [32:1280]

    :INPUT ACCEPT [0:0]

    :OUTPUT ACCEPT [0:0]

    :POSTROUTING ACCEPT [0:0]

    -A PREROUTING -p tcp -m tcp --dport 9998 -j DNAT --to-destination 172.17.0.9:80

    -A POSTROUTING -d 172.17.0.9/32 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.16.10.214

    COMMIT

    # Completed on Fri Aug 10 11:13:57 2018

    # Generated by iptables-save v1.4.21 on Fri Aug 10 11:13:57 2018

    *filter

    :INPUT ACCEPT [0:0]

    :FORWARD ACCEPT [0:0]

    :OUTPUT ACCEPT [50:5056]

    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    -A INPUT -p icmp -j ACCEPT

    -A INPUT -i lo -j ACCEPT

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 9998 -j ACCEPT

    #-A INPUT -j REJECT --reject-with icmp-host-prohibited

    #-A FORWARD -j REJECT --reject-with icmp-host-prohibited

    COMMIT

    # Completed on Fri Aug 10 11:13:57 2018

     

    最后重启iptbales服务

    [root@docker-test ~]# systemctl restart iptables

     

    查看iptables规则

    [root@docker-test ~]# iptables -L

    Chain INPUT (policy ACCEPT)

    target     prot opt source               destination        

    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED

    ACCEPT     icmp --  anywhere             anywhere           

    ACCEPT     all  --  anywhere             anywhere           

    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh

    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:distinct32

     

    Chain FORWARD (policy ACCEPT)

    target     prot opt source               destination        

     

    Chain OUTPUT (policy ACCEPT)

    target     prot opt source               destination       

     

    [root@docker-test ~]# iptables -L -t nat

    Chain PREROUTING (policy ACCEPT)

    target     prot opt source               destination        

    DNAT       tcp  --  anywhere             anywhere             tcp dpt:distinct32 to:172.17.0.9:80

     

    Chain INPUT (policy ACCEPT)

    target     prot opt source               destination        

     

    Chain OUTPUT (policy ACCEPT)

    target     prot opt source               destination        

     

    Chain POSTROUTING (policy ACCEPT)

    target     prot opt source               destination        

    SNAT       tcp  --  anywhere             172.17.0.9           tcp spt:http to:192.16.10.214

     

    然后访问http://192.168.10.214:9998/,就能转发访问到my-nginx9容器的80端口了!!! 

    一次性删除所有容器,包括正在运行的容器

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    [root@docker-test ~]# docker rm -f `docker ps -a -q`

    990752e39d75

    0e86be91026d

    ff2bc46a8ee4

    c08eb29e3c0a

    ba72a93196f7

    debca5ec7dbb

    589237ceec9d

    2218c7d88ccc

    [root@docker-test ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

    如果启动docker 容器时,有如下报错:
    /usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint my-nginx (db5a0edac68d1ea7ccaa3a1e0db31ebdf278076ef4851ee4250221af6167f9ac): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8088 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.

    解决办法

    1

    2

    3

    4

    1)不需要关闭防火墙

    2)重启docker服务:systemctl restart docker

    3)docker服务重启后,所有容器都会关闭,应立即批量启动全部容器:docker start `docker ps -a -q`

       启动的容器也会包括上面报错的容器,重启docker后,该容器就能正常启动和使用了!

    ============问题:  Docker 端口映射到宿主机后, 外部无法访问对应宿主机端口==============

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    创建docker容器的时候,做了端口映射到宿主机, 防火墙已关闭, 但是外部始终无法访问宿主机端口?

    这种情况基本就是因为宿主机没有开启ip转发功能,从而导致外部网络访问宿主机对应端口是没能转发到 Docker Container 所对应的端口上。

     

    解决办法:

    Linux 发行版默认情况下是不开启 ip 转发功能的。这是一个好的做法,因为大多数人是用不到 ip 转发的,但是如果架设一个 Linux 路由或者VPN服务我们就需要开启该服务了。

     

    在 Linux 中开启 ip 转发的内核参数为:net.ipv4.ip_forward,查看是否开启 ip转发:

    # cat /proc/sys/net/ipv4/ip_forward           // 0:未开启,1:已开启

     

    ==============================

    打开ip转发功能, 下面两种方法都是临时打开ip转发功能!

    # echo 1 > /proc/sys/net/ipv4/ip_forward

    # sysctl -w net.ipv4.ip_forward=1

     

    ==============================

    永久生效的ip转发

    # vim /etc/sysctl.conf

    net.ipv4.ip_forward = 1

     

    # sysctl -p /etc/sysctl.conf      // 立即生效

     

    Linux 系统中也可以通过重启网卡来立即生效 (修改sysctl.conf文件后的生效)

    # service network restart                  //CentOS 6

    # systemctl restart network              //CentOS 7

    ***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************

    展开全文
  • -p 指定宿主机端口与容器端口 81是给主机访问的端口 80则是给容器,注意主机是访问不到的,该情况后续会说 该命令执行会去本地仓库找nginx容器然后运行,如果找不到则会去官网下载。该图示代表从官网下载的情况...

    连载文章:Docker大纲

    一、安装命令

    docker pull nginx 普通安装

    docker run -d -p 81:80 nginx 运行该程序

    -d 表示静默运行

    -p 指定宿主机端口与容器端口 81是给主机访问的端口 80则是给容器,注意主机是访问不到的,该情况后续会说

    该命令执行会去本地仓库找nginx容器然后运行,如果找不到则会去官网下载。该图示代表从官网下载的情况

    docker run -p 81:80 nginx

     二、成功启动

    看到Status:则代表已经成功启动了。

    三、访问

    3.1、新建窗口页访问

    克隆一个会话

    克隆之后来到克隆会话先关闭防火墙然后进行访问

     systemctl stop firewalld 关闭防火墙

    curl + ip地址访问

    3.2、浏览器访问

    复制端口号加81打开谷歌,然后输入地址,即可访问

    80则无法访问到因为内部容器端口号是无法访问的,PS:浏览器默认端口号为80,所以访问该链接后面的ip会隐藏 

    四、重启服务等操作

    先用docker ps 查看进行服务

    docker restart 后面接服务ID 代表重启

    docker stop 停止服务

    五、访问内部端口

    这里补充一下如何访问内部端口

    使用docker inspect + id  查看nginx的配置信息

    会返回一大串JSON,具体看到NetWorkSettings 也就是设置下

    然后输入curl + 内部的端口地址 “IPADDRESS”字段对应的地址 + 内部端口 第一步 -p 第二个端口 也就是 80

    如图,访问后,即可看到之前访问得到的信息

    提供两个端口号是为了提高安全性,外部是访问不到真实的权限,必须要通过容器映射端口号才能访问,就跟nginx是一样的道理。

     

     

    展开全文
  • docker映射外部端口

    千次阅读 2019-07-04 10:10:22
    Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。 容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射。 注意: 宿主机的一个端口只能映射到容器内部的某一个端口上,比如...
  • 防火墙开发端口: 然后下一步,下一步。输入名称就行了。   如何测试端口是否开发: 找一台跟此电脑在同一局域网的电脑,进入命令行(快捷键:win键+R ,输入cmd) 。 例如本机在局域网中的ip是:192....
  • Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。 ... 1、外部访问容器容器... a、用-P(大写)标记时,docker会随机选择一个端口映射到容器内部开放的网络端口上。 $ docker run -d -P myfi...
  • https://blog.csdn.net/czk740960212/article/details/80393825背景Docker支持端口映射,即将主机的某一端口映射到容器的端口,这样对主机这一端口的请求就会被转发到容器内,实现外部网络与容器通信的目的。...
  • k8s创建service,令外部端口访问

    千次阅读 2020-05-22 16:19:44
    一、pod IP 每个pod 都有自己的 IP 地址,存在于pod scope。 当 controller 用新 ...这意味着在一个pod 里的容器们能够通过localhost访问彼此的端口。 二、service的三种端口 ...
  • 通过-p或-P参数来指定端口映射,使用-P(大写)标记时,docker会随机选择一个端口映射到容器内部开放的网络端口 启动容器docker run -d -P training/webapp python app.py,随机分配了32769端口 访问后,可以链接到...
  • 如果提示 telnet不是内部外部命令,是因为win10下telnet默认是不开启的 去控制面板-->程序功能-->启动或关闭Windows功能-->在Telnet Client前的复选框打上勾,点击确定配置成功后就可以了 ...
  • windows系统开放外部访问端口

    万次阅读 2017-05-25 09:30:16
    例如外部网站想通过8443端口访问你的windows server 服务器,而你的服务器没有开放8443端口,通过以下操作可以开放8443端口 1.打开控制面板 2.先进行入站规则设置 ...
  • 如果想同时通过https域名网址来请求多个对外服务,就需要在Nginx配置里来对请求进行规则判断,并匹配至相应的内部端口,这也是Nginx反向代理强大功能之一,本文主要是自己配置过程的记录,欢迎讨论指正。...
  • 引入:说到为什么还得从DNS服务器说起。我在我的电脑上安装了DNS服务器,但是用网络去访问还怎么都访问都不上去。于是我就想办法去检测该ip地址...结果提示了“talnet不是内部的命令”talnet 127.0.0.1 25解释一下: t
  • 未使用代码前: 可以轻易的扫描出ROS端口使用后截图:再扫描一下:空白一片,啥也没有。脚本代码如下:/ip firewall filteradd chain=input protocol=tcp psd=21,3s,3,1 action=add-src-to-address-list \ address...
  • 虚拟机新开了5005端口,系统内部是显示开了的,但是外部不能访问端口。 一些需要用到的命令: 1、firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld / firewall-cmd...
  • linux实现nat转发和内部端口映射

    千次阅读 2018-01-25 17:35:12
    linux实现nat转发和内部端口映射 双网卡: 路由机 eth0:114.114.114.114(公网ip) eth1:192.168.1.1(内网ip) pc1 eth0:192.168.1.2(内网ip) eth1(拨号ip) pc2 eth0:192.168.1.3(内网ip) eth1(拨号ip)  ...
  • jenkins修改端口有两种方法:一种:如果是用java命令启动的war包,使用:“java -jar jenkins.war --httpPort=8081”命令就可以修改端口了,这种方式是一次性的,一旦停止运行端口是没有变化的。二种:如果是将...
  • 通过docker方式安装的kong,在启动之后就不存在这个问题,外部主机通过IP端口可以轻松访问 问题排查分析 ubuntu虚拟机下情况 刚安装的kong,默认监听的地址是127.0.0.1:8001,127.0.0.1:8443,可以通过查看/usr/...
  • ![图片说明](https://img-ask.csdn.net/upload/201711/10/1510281253_776714.png) linux内部能连通但是外部网络不成功。
  •   前段时间使用 Docker 装了 GitLab,SSH 配置都已经配置完毕,容器端口和宿主机端口也映射完毕。Firewall 和 SELinux 也已经关闭。   1、在宿主机上访问对应的端口使用 SSH 拉取 GitLab 上的代码正常   2、...
  • 打开命令提示符窗口输入netstat -ano查看80端口时,系统提示这个不是内部或者外部命令!解决方法:打开命令窗口:开始-&gt;运行-&gt;输入CMD-&gt;确定在窗口输入:C: (敲回车键)再输入: cd\windows\...
  • 就像这样 : ![图片说明](https://img-ask.csdn.net/upload/201604/16/1460799470_395937.png)
  • 不管是2008还是2003服务器都是要用到端口服务的,本文我们以...mysql的3306端口在什么清空下要开放给外部呢,比如你需要在本地电脑上链接服务器上的数据库 对数据库进行操作备份 删除 修改之类的操作就需要开启3306的...
  • k8s 暴露端口外部访问

    万次阅读 2019-05-14 14:50:18
    kubectl -n onap get svc 获取所有svc(svc 的type,ip ,port) kubectl -n onap edit svc ...修改service为nodeport :30003(新加端口号,自定义)type:NodePort 再查看svc 执行:kubectl -n onap get svc...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 144,983
精华内容 57,993
关键字:

外部端口和内部端口