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/ ...
随机推荐
- git命令行指南
Git 常用命令 git init here -- 创建本地仓库(repository),将会在文件夹下创建一个 .git 文件夹,.git 文件夹里存储了所有的版本信息.标记等内容 git remo ...
- 26.Python三目运算符(三元运算符)用法详解
Python 可通过 if 语句来实现三目运算符的功能,因此可以近似地把这种 if 语句当成三目运算符.作为三目运算符的 if 语句的语法格式如下: True_statements if expres ...
- POJ2942Knights of the round table
这题第一次做的人一般是颓题解的. 首先我们转化一下问题,既然厌恶的人不能一起出席,是一种不传递关系,我们构建补图,这样补图的边表示两个骑士可以同时出席. 此时,由于只能有奇数个人参加,则我们要找出奇环 ...
- centos7.2 安装nginx+php
Nginx的安装 安装快速HTTP服务器“的Nginx”并配置HTTP服务器# install from EPEL [root@linuxprobe~]# yum --enablerepo=epel ...
- sklearn4_混合分类器
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- java二进制工具
可以运用jdk工具监控java应用性能,再配合 jmeter 进行了一个长时间的加压,在加压过程中重点关注了系统资源的使用情况 D:\Program Files (x86)\Java\jdk1.8.0 ...
- Linux版本
1.内核:Linux内核Kernel目前最新稳定版 3.4 http://www.kernel.org/ 2.发行版本:是一些厂商将Linux系统内核与应用软件和文档包装起来,并提供一些安装界面和系 ...
- Android studio2 中的 SDK Manager的使用-------Android SDK 的安装与更新(Install missing platform(s) and sync project 编译错误解决)
最近在编写Android程序,其中有一个问题就是对旧应用的导入,此时往往你的Android SDK中并没有老版本的Android SDK, 此时往往会提示你出现错误 Install missing p ...
- Prism框架 如何在主程序中合理的弹出子窗体
说起子窗体,大家都会想到ChildWindow,多熟悉的一个控件.不错,Sliverlight中已经提供了子窗体的具体实现,而在WPF中却没有这么好的事情(有的第三方控件商已经提供此控件).最常见的实 ...
- win + T 快捷键
和 alt + tab 不同,win + T会在 在任务栏间的程序间进行switch