docker端口映射和容器互相访问
端口映射
容器运行时如果没有指定端口,与外界是无法通信的,比如当前我们的有一台MySQL的docker container,当前容器正在运行mysql并提供3306端口
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e54153e56ca mysql:version1 "/bin/bash" 8 days ago Up About a minute mysql-new-container # docker exec -it mysql-new-container /bin/bash -c "netstat -antlp |grep 3306"
tcp6 0 0 :::3306 :::* LISTEN -
此时我们并未做端口映射,所以宿主机和外界是无法访问该MySQL服务的
将容器关机,重开机时进行端口映射
先将容器内的Mysql服务停止
# docker exec -u mysqladmin -it mysql-new-container /bin/bash -c "/usr/local/mysql/bin/mysqladmin -uroot -pmypna123 shutdown"
停止容器
# docker stop mysql-new-container
mysql-new-container
根据容器创建一个image镜像
# docker commit mysql-new-container mysql-new-container-temp
sha256:2f516f00086e5bd6f52bb90b75f03a763eaff08f62a93b6cd73d1eb0226571fe # docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql-new-container-temp latest 2f516f00086e seconds ago 333MB
mysql version1 bf6b23f800ed weeks ago 333MB
centos latest 0f3e07c0138f weeks ago 220MB
删除容器
# docker rm mysql-new-container
mysql-new-container
根据镜像新建容器并启动会mysql
# docker run --name mysql-new-container --hostname mysql-new-container --mount type=volume,source=mysql-new-vol,target=/usr/local/mysql -p : -it mysql-new-container-temp /bin/bash
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bdc71602ee74 mysql-new-container-temp "/bin/bash" minutes ago Up minutes 0.0.0.0:->/tcp mysql-new-container # docker exec -u mysqladmin -it mysql-new-container /bin/bash
$ cd /usr/local/mysql/bin
$ mysqld_safe &
查看该容器的端口映射信息
# docker port mysql-new-container
/tcp -> 0.0.0.0:
测试端口映射,访问宿主机的3306端口
mysql -h 172.16.101.55 -u root -pmypna123 -P mysql -e "status"
mysql: [Warning] Using a password on the command line interface can be insecure.
--------------
mysql Ver 14.14 Distrib 5.7., for linux-glibc2. (x86_64) using EditLine wrapper Connection id:
Current database: mysql
Current user: root@sht-sgmhadoopnn-.telenav.cn
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.-log MySQL Community Server (GPL)
Protocol version:
Connection: 172.16.101.55 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
TCP port:
Uptime: min sec Threads: Questions: Slow queries: Opens: Flush tables: Open tables: Queries per second avg: 0.062
--------------
容器互联
容器之间默认无法正常进行通信,我们新建一个web容器,在web容器里可以访问到另外一个容器mysql-new-container
# docker run --name web --hostname web --link mysql-new-container:db -it centos:latest /bin/bash # docker ps -a --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bb29181e0cd5df1d34c94313e9920093bcf705626750da2d43f8067dd332281 centos:latest "/bin/bash" minutes ago Up minutes web
bdc71602ee74907c8902c878b805cc28b57726b80350395fd4cd9cf69a86795d mysql-new-container-temp "/bin/bash" minutes ago Up minutes 0.0.0.0:->/tcp mysql-new-container,web/db
通过使用--link选项可以实现该功能,通过登录web容器查看信息
[root@web /]# cat /etc/hosts
127.0.0.1 localhost
:: localhost ip6-localhost ip6-loopback
fe00:: ip6-localnet
ff00:: ip6-mcastprefix
ff02:: ip6-allnodes
ff02:: ip6-allrouters
172.17.0.2 db mysql-new-container mysql-new-container
172.17.0.3 web [root@web /]# env
DB_PORT=tcp://172.17.0.2:3306
DB_PORT_3306_TCP_ADDR=172.17.0.2
LANG=en_US.UTF-
HOSTNAME=web
DB_PORT_3306_TCP=tcp://172.17.0.2:3306
DB_PORT_3306_TCP_PORT=
PWD=/
HOME=/root
TERM=xterm
SHLVL=
DB_NAME=/web/db
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DB_PORT_3306_TCP_PROTO=tcp
LESSOPEN=||/usr/bin/lesspipe.sh %s
_=/usr/bin/env
可以发现--link选项主要是向节点的hosts文件和环境变量添加被连接节点的信息
docker端口映射和容器互相访问的更多相关文章
- 详解Docker 端口映射与容器互联
详解Docker 端口映射与容器互联 1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行 ...
- docker——端口映射与容器互联
在生产环境中,单个服务往往是独立的,但是服务与服务之间往往是相互依赖的,这样对于容器来说,容器之间就需要相互访问.除了网络访问之外,docker还提供了另外两种方式来满足服务的访问. 一:允许映射容器 ...
- Docker端口映射与容器互联
Docker提供了两个功能来满足访问的基本需求:一是允许映射容器内应用的服务端口到本地宿主主机:另一个是互联机制实现多个容器间通过容器名来快速实现访问. 一.端口映射实现访问容器 当容器中运行一些网络 ...
- docker 端口映射 及外部无法访问问题
docker容器内提供服务并监听8888端口,要使外部能够访问,需要做端口映射. docker run -it --rm -p : server:v1 此时出现问题,在虚机A上部署后,在A内能够访问8 ...
- 【Docker端口映射】
Docker端口映射即将容器内开放的端口映射到宿主机端口,以实现外部网络的访问. 首先,我们先下载用于测试端口映射的镜像: [root@fedora ~]# docker pull training/ ...
- Docker基础-端口映射与容器互联
1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时, ...
- Docker实战(五)之端口映射与容器互联
除了网络访问外,Docker还提供了两个很方便的功能来满足服务访问的基本需求:一个是允许映射容器内应用的服务端口到本地宿主主机;另一个是互联机制实现多个容器间通过容器名来快速访问. 1.端口映射实现访 ...
- docker 实践五:端口映射和容器互联
本篇是关于 docker 容器的端口映射和容器之间的互联内容. 注:环境为 CentOS7,docker 19.03. docker 的容器除了能连接网络外,在许多时候,我们需要让多个容器来协同完成任 ...
- docker端口映射,批量删除容器
docker端口映射 http://blog.csdn.net/yjk13703623757/article/details/69212521 批量删除容器 http://blog.csdn.net/ ...
随机推荐
- Trying to get property 'art_id' of non-object
“Trying to get property 'art_id' of non-object” 正在尝试获取非对象的“art-id”属性. 我之前也是这么写的没出问题<td>{{$ ...
- [CTF]Heap vuln -- unlink
0x00: 起因 一直在堆的漏洞利用中不得要领,之前ZCTF又是三个堆的利用,血崩,chxx表哥给写了一个heap的pwn,学习学习. 0x01: 关于heap的unlink的漏洞利用,出的很早,在低 ...
- vue 钩子函数的使用
1.什么是自定义指令,有哪些钩子函数及自定义指令的使用场景 ①自定义指令是什么?以及自定义指令的使用场景 在Vue中,有很多内置指令,但是这些指令只能满足我们最基础的使用,当我们在实际项目中遇到了必须 ...
- Java中的Error和Exception
Exception和Error都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型. Excep ...
- JavaWeb_ Servlet API(中文)
Java Servlet 中文API Java Servlet API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包.这两个软件包的同时存在使得Java Se ...
- 2.微服务开发框架——Spring Cloud
微服务开发框架—Spring Cloud 2.1. Spring Cloud简介及其特点 简介: Spring Cloud为开发人员提供了快速构建分布式系统中一些常见 ...
- C++入门经典-例6.21-比较string字符串,比较两个字符串
1:使用“>”.“!=”.“>=”等比较运算符可以比较两个字符串的内容.比较的方法是将两个string字符串从头开始比较每一个字符,直到出现两者不一致.比较这两个不相同的字符的字面值,得出 ...
- mysql 日常操作-DDL
1 修改字段类型 需求修改表字段类型 alter table 表名 modify column 修改的字段(列名) 类型(修改的类型) ALTER TABLE sys_entry_item m ...
- spring boot 下 mapper接口与xml文件映射问题
1. @MapperScan @MapperScan("com.streamax.ums.business.dao") 注解扫描的包路径是否有问题 2. 目录结构 mapper接口 ...
- Liunx 命令之链接操作
Linux 系统中有软链接和硬链接两种特殊的"文件". 软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录. 硬链接则透过文件系统的inode来产生新档名 ...