本文将分享用docker搭建node.js服务,端口映射无效的详细内容,并且还将对docker端口映射理解进行详尽解释,此外,我们还将为大家带来关于16.docker网络端口映射、26.Docker端
本文将分享用 docker 搭建 node.js 服务,端口映射无效的详细内容,并且还将对docker端口映射 理解进行详尽解释,此外,我们还将为大家带来关于16. docker 网络 端口映射、26.Docker 端口映射、Docker 基础内容之端口映射、docker 容器启动一段时间后,端口映射失效了的相关知识,希望对你有所帮助。
本文目录一览:- 用 docker 搭建 node.js 服务,端口映射无效(docker端口映射 理解)
- 16. docker 网络 端口映射
- 26.Docker 端口映射
- Docker 基础内容之端口映射
- 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 网络 端口映射
一.本地操作
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 端口映射
默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器。
容器访问外部实现
容器所有到外部网络的连接,源地址都会被 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 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 pa -a命令后,ports一列属性没了。这是咋地啦?
今天关于用 docker 搭建 node.js 服务,端口映射无效和docker端口映射 理解的介绍到此结束,谢谢您的阅读,有关16. docker 网络 端口映射、26.Docker 端口映射、Docker 基础内容之端口映射、docker 容器启动一段时间后,端口映射失效了等更多相关知识的信息可以在本站进行查询。
本文标签: