docker容器端口映射
我们会遇到一个问题:当我们的docker容器启动一个端口为8080,提供Nginx服务。他的IP为127的本地IP,如何才能通过外部网络正常访问呢?
docker给出的解决方案是:使用-p参数,将Nginx容器的80端口映射到宿主机的8080,然后通过宿主机的8080端口对外提供服务。这就好比是在宿主机上启动了一个8080端口提供Nginx服务是一个意思。
我们来实验一下。
首先我们宿主机的IP为:192.168.209.130,默认8080为关闭状态
1,我们需要先登录阿里云的账号,下载一个官方提供的Nginx容器
docker login --username=一梦浮生1987 registry.cn-hangzhou.aliyuncs.com
[root@localhost data01]# docker login --username=一梦浮生1987 registry.cn-hangzhou.aliyuncs.com
Password:
Login Succeeded
[root@localhost data01]# docker pull nginx
Using default tag: latest
Trying to pull repository docker.io/library/nginx ...
latest: Pulling from docker.io/library/nginx
69692152171a: Pull complete
30afc0b18f67: Pull complete
596b1d696923: Pull complete
febe5bd23e98: Pull complete
8283eee92e2f: Pull complete
351ad75a6cfa: Pull complete
Digest: sha256:6d75c99af15565a301e48297fa2d121e15d80ad526f8369c526324f0f7ccb750
Status: Downloaded newer image for docker.io/nginx:latest
给下载的镜像改个名字方便使用
[root@localhost data01]# docker tag docker.io/nginx:latest nginx:v1
[root@localhost data01]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
c
nginx v1 d1a364dc548d 2 days ago 133 MB
2,使用这个Nginx镜像,创建一个Nginx容器。
docker run -itd --name Nginx1 -v /data01:/data01 nginx:v1 /bin/bash
[root@localhost data01]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b087a6082a72 nginx:v1 "/docker-entrypoin..." 11 seconds ago Up 10 seconds 80/tcp Nginx1
进入容器看下
docker exec -it Nginx1 /bin/bash
接下来我们找到Nginx的安装目录
root@b087a6082a72:~# find / -name nginx
/etc/default/nginx
/etc/init.d/nginx
/etc/logrotate.d/nginx
/etc/nginx #主文件目录
/usr/lib/nginx #
/usr/sbin/nginx #启动命令
/usr/share/doc/nginx
/usr/share/nginx
/var/cache/nginx
/var/log/nginx #日志目录
然后我们会发现ps、netstat、vi等等命令都不能用。
找到nginx.conf,发现他调用了
include /etc/nginx/conf.d/*.conf;
cat /etc/nginx/conf.d/default.conf
发现他指定了端口为80,可我们也不能改端口啊,怎么查看Nginx启动状态呢?试了试,还好有个curl工具
root@b087a6082a72:~# curl 127.0.0.1:80
curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused
发现无法连接,说明Nginx没有启动,让我们直接启动nginx
root@b087a6082a72:~# nginx
再看:
这次有了。
但问题也出来了,我们只能在docker容器里面看nginx进程,怎么对外部提供服务呢?
docker提供了-p参数,我们使用这个参数新建一个容器为nginx2,将宿主机的8080和容器的80端口映射,看是否能在本地打开
[root@localhost ~]# docker run -itd -p 8080:80 --name Nginx2 -v /data01:/data01 nginx:v1 /bin/bash
c6c7ecb6b515f56db942d8ca8aeaa008e299b1dc54aa984322b06c968548c91d
[root@localhost ~]#
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6c7ecb6b515 nginx:v1 "/docker-entrypoin..." 4 seconds ago Up 3 seconds 0.0.0.0:8080->80/tcp Nginx2
查看宿主机,发现宿主机的8080端口开放了
[root@localhost ~]# netstat -ano | grep 8080
tcp6 0 0 :::8080 :::* LISTEN off (0.00/0/0)
我们试试用192.168.209.130:8080访问
成了!实验证明,端口映射起作用了。
实验虽然成功了,但是nginx容器使用起来却不是那么完美,首先我们无法在容器内更改nginx的配置文件,也就无法对nginx进行配置,不过没关系,我们在启动容器的时候,指定了一个共享目录为/data01,我们可以将nginx的配置文件写好后,放在/data01里面,直接替换这个nginx.conf即可。
同样,也可以使用nginx -C 配置文件的绝对路径来自己定义nginx启动所需要的文件。
当然,我们也可以把以上文件编排好之后,使用dockerfile来重新启动一个容器提供服务。
需要注意:
docker端口映射有-P和-p之分
- -P :是容器内部端口随机映射到主机的高端口。
- -p : 是容器内部端口绑定到指定的主机端口。
如果使用-P随机映射的话,启动容器后,使用
docker ps -a即可查看映射关系。docker port 也可以查看。
[root@localhost ~]# docker port Nginx2
80/tcp -> 0.0.0.0:8080
docker容器端口映射相关推荐
- linux修改容器内的mysql端口映射_修改docker容器端口映射的方法
大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改.通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射. 有没有办法不保存镜像而直接修改 ...
- docker 添加端口映射_Docker容器修改端口映射
对于已经建立的docker容器,需要新增容器对主机的端口映射,主要分为三种: 一:通过修改配置文件修改docker容器端口映射 1.使用docker ps -a命令找到要修改容器的CONTAINER ...
- Docker 网络-端口映射、容器链接、Networking
在使用Docker容器时,我们需要访问容器的内部网络,或需要在容器间相互访问.Docker 容器默认不会开放任何端口,因此需要将容器与宿主机进行端口映射,使容器可外部访问.而容器间互相访问,除了可以基 ...
- docker如何查看宿主机到容器端口映射
docker/Docker如何查看宿主机到容器端口映射关系 背景 前些天的时候, 在定位问题时发现docker emqx 连接websocket (8083)端口出现异常. 经过很长时间定位, 才发现 ...
- docker镜像、容器 常用命令,容器端口映射
文章目录 前言 一.docker基础命令 二.docker镜像命令 1.docker images:列出本地主机的镜像 2. docker search :查看镜像 3.docker pull:拉取镜 ...
- Centos7.6部署docker容器虚拟化平台(Container 容器端口映射)
Docker的概述: 实验环境: Centos 7.6版本 Dcoker 概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器 中,然后发布到任何流行的 ...
- 在Linux中进行docker网络端口映射
在Linux中有两种安装docker的方法,一种是使用官方安装脚本自动安装docker,另一种是手动安装docker. 容器中可以运行一些应用,要让外部也可以访问这些应用,可以通过"-P或- ...
- docker的端口映射顺序
docker的端口映射顺序 docker run -d -p 5433:5432 postgres -p 宿主机端口5433 : 容器端口5432
- Docker 修改运行中的容器端口映射
如果用docker run启动容器的时候发现自己忘记指定 -p 进行端口映射了,可以采取如下三种方式来增加端口映射: 1.第一种是最无脑的方式,直接删除当前容器,然后用原镜像重新跑一个新的容器.简单暴 ...
- docker 添加端口映射_Docker三大核心概念之容器
容器 1.新建容器 docker create命令创建一个容器,例如: docker create -it hello-world 使用docker create命令新建的容器处于停止状态.可以使用 ...
最新文章
- Hibernate【XXXX.hbm.xml】总结
- 基于wifi的单片机无线通信研究_SKYLAB:智能家居无线协议WiFi/BLE/Zigbee介绍与对比...
- [简单题]Counting Duplicates( Python 实现)
- Java final、static final 讲解
- 计算机组成原理(哈工大刘宏伟)135讲(三)
- 阿里云发布勒索病毒专杀工具:一键修复 彻底查杀
- DCD DSR DTR RTS CTS表示什么意思
- 如何构建一个分布式爬虫:理论篇
- Oracle 11G 安装详解
- [ruby on rails] 跟我学之(7)创建数据
- 大数据_MapperReduce_Hbase相关面试题_补充说明---Hbase工作笔记0030
- html显示作者信息,HTML基础 meta name author 添加网页作者的信息
- linux salt命令 -e,Linux记录-salt命令
- Ubuntu下添加打印机---之寻找设备lpinfo
- 频率对电感值和电感尺寸的影响 // 《精通开关电源设计》P50:频率对电感值和电感尺寸的影响
- Linux驱动模块Makefile编写
- windows 文件后缀名
- Windows10 Hero默认壁纸(11色)
- CDN 是什么 、CDN 引入
- 基于颜色的R2V软件快速矢量化