GVKun编程网logo

用 docker 搭建 node.js 服务,端口映射无效(docker端口映射 理解)

14

本文将分享用docker搭建node.js服务,端口映射无效的详细内容,并且还将对docker端口映射理解进行详尽解释,此外,我们还将为大家带来关于16.docker网络端口映射、26.Docker端

本文将分享用 docker 搭建 node.js 服务,端口映射无效的详细内容,并且还将对docker端口映射 理解进行详尽解释,此外,我们还将为大家带来关于16. docker 网络 端口映射、26.Docker 端口映射、Docker 基础内容之端口映射、docker 容器启动一段时间后,端口映射失效了的相关知识,希望对你有所帮助。

本文目录一览:

用 docker 搭建 node.js 服务,端口映射无效(docker端口映射 理解)

用 docker 搭建 node.js 服务,端口映射无效(docker端口映射 理解)

发现用 docker 搭建 node.js 服务时,向外提供的端口是 8990,但是搭建成功后,发现访问 ''localhost:8990'' 或 ''127.0.0.1:8990'' 都无法访问
dockerfile 配置如下:

 FROM node:6.10.3

WORKDIR /data1/server

RUN  cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


# replace this with your application''s default port
EXPOSE 8990

VOLUME ["/data1"]

app.js

var express = require(''express'');

// Constants
var PORT = 8990;

// App
var app = express();
app.get(''/'', function (req, res) {
res.send(''Hello world\n'');
});

app.listen(PORT);
 docker run -it -p 8990:8990 /bin/bash

进去后执行

 npm start

成功运行了,但是发现根本无法访问 ''localhost:8990'' 或 ''127.0.0.1:8990'' 经过一番努力,发现是绑定 127.0.0.1 的问题

127.0.0.1 是一个回环地址,只能本机访问,外部无法访问的。所以 express 要监听到 0.0.0.0 这个地址上

苦逼啊,居然这个原因,搞了很久。

16. docker 网络 端口映射

16. docker 网络 端口映射

一.本地操作

1.如何将 nginx 暴露给外界

  创建 nginx 服务器

    docker run  --name web -d nginx

  查看 nginx 的 ip地址

    docker network inspect bridge

2.使用端口映射 在外网也能访问 nginx 删除旧的nginx

    将容器的 80 端口 映射到本地的 8888 端口

    前面是本地端口 后面是容器端口

    docker run  --name web -p 8888:80-d nginx

3.添加部分参数 使 127.0.0.1 支持访问 虚拟机容器的服务器  修改 Vagrantfile 为

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.require_version ">= 1.6.0"
boxes = [
{
:name => "docker-node1",
:eth1 => "192.168.205.10",
:mem => "1024",
:cpu => "1",
:port => "8888"
},
{
:name => "docker-node2",
:eth1 => "192.168.205.11",
:mem => "1024",
:cpu => "1",
:port => "9999"
}
]
Vagrant.configure(2) do |config|
config.vm.box = "centos/7"
boxes.each do |opts|
config.vm.define opts[:name] do |config|
config.vm.hostname = opts[:name]
config.vm.network "forwarded_port", guest: 80, host: opts[:port]
config.vm.provider "vmware_fusion" do |v|
v.vmx["memsize"] = opts[:mem]
v.vmx["numvcpus"] = opts[:cpu]
end
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", opts[:mem]]
v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
end
config.vm.network :private_network, ip: opts[:eth1]
end
end
config.vm.synced_folder "./labs", "/home/vagrant/labs"
config.vm.provision "shell", privileged: true, path: "./setup.sh"
end

4.删除虚拟机 并 重新 up

  vagrant destroy

  vagrant up

5.重新安装 web  并 访问 127.0.0.1:8888 即可

  docker run  --name web -p 80:80 -d nginx

 

二.阿里云操作

  docker run  --name web -p 80:80 -d nginx

  然后访问 公有 ip 地址即可出现nginx 的 welcome 页面

26.Docker 端口映射

26.Docker 端口映射

默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器。

容器访问外部实现

容器所有到外部网络的连接,源地址都会被 NAT 成本地系统的 IP 地址。这是使用 iptables 的源地址伪装操作实现的。

查看主机的 NAT 规则。

$ sudo iptables -t nat -nL
...
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  172.17.0.0/16       !172.17.0.0/16
...

其中,上述规则将所有源地址在 172.17.0.0/16 网段,目标地址为其他网段(外部网络)的流量动态伪装为从系统网卡发出。MASQUERADE 跟传统 SNAT 的好处是它能动态从网卡获取地址。

外部访问容器实现

容器允许外部访问,可以在 docker run 时候通过 -p-P 参数来启用。

不管用那种办法,其实也是在本地的 iptable 的 nat 表中添加相应的规则。

使用 -P 时:

$ iptables -t nat -nL
...
Chain DOCKER (2 references)
target     prot opt source               destination
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:49153 to:172.17.0.2:80

使用 -p 80:80 时:

$ iptables -t nat -nL
Chain DOCKER (2 references)
target     prot opt source               destination
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.17.0.2:80

注意:

  • 这里的规则映射了 0.0.0.0,意味着将接受主机来自所有接口的流量。用户可以通过 -p IP:host_port:container_port-p IP::port 来指定允许访问容器的主机上的 IP、接口等,以制定更严格的规则。
  • 如果希望永久绑定到某个固定的 IP 地址,可以在 Docker 配置文件 /etc/default/docker 中指定 DOCKER_OPTS="--ip=IP_ADDRESS",之后重启 Docker 服务即可生效。

Docker 基础内容之端口映射

Docker 基础内容之端口映射

随机映射
docker run -d -P training/webapp python app.py                      # -P会随机映射一个 49000~49900 的端口到内部容器开放的网络端口

映射所有接口地址
docker run -d -p 5000:5000 training/webapp python app.py


映射到指定地址的指定端口
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

映射到指定地址的任意端口
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
# 使用 ip::containerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口。

查看映射端口配置
docker port containerID

多端口绑定
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py

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

 

docker 容器启动一段时间后,端口映射失效了

docker 容器启动一段时间后,端口映射失效了

如上图所示,docker pa -a命令后,ports一列属性没了。这是咋地啦?

今天关于用 docker 搭建 node.js 服务,端口映射无效docker端口映射 理解的介绍到此结束,谢谢您的阅读,有关16. docker 网络 端口映射、26.Docker 端口映射、Docker 基础内容之端口映射、docker 容器启动一段时间后,端口映射失效了等更多相关知识的信息可以在本站进行查询。

本文标签: