端口映射

容器运行时如果没有指定端口,与外界是无法通信的,比如当前我们的有一台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端口映射和容器互相访问的更多相关文章

  1. 详解Docker 端口映射与容器互联

    详解Docker 端口映射与容器互联 1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行 ...

  2. docker——端口映射与容器互联

    在生产环境中,单个服务往往是独立的,但是服务与服务之间往往是相互依赖的,这样对于容器来说,容器之间就需要相互访问.除了网络访问之外,docker还提供了另外两种方式来满足服务的访问. 一:允许映射容器 ...

  3. Docker端口映射与容器互联

    Docker提供了两个功能来满足访问的基本需求:一是允许映射容器内应用的服务端口到本地宿主主机:另一个是互联机制实现多个容器间通过容器名来快速实现访问. 一.端口映射实现访问容器 当容器中运行一些网络 ...

  4. docker 端口映射 及外部无法访问问题

    docker容器内提供服务并监听8888端口,要使外部能够访问,需要做端口映射. docker run -it --rm -p : server:v1 此时出现问题,在虚机A上部署后,在A内能够访问8 ...

  5. 【Docker端口映射】

    Docker端口映射即将容器内开放的端口映射到宿主机端口,以实现外部网络的访问. 首先,我们先下载用于测试端口映射的镜像: [root@fedora ~]# docker pull training/ ...

  6. Docker基础-端口映射与容器互联

    1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时, ...

  7. Docker实战(五)之端口映射与容器互联

    除了网络访问外,Docker还提供了两个很方便的功能来满足服务访问的基本需求:一个是允许映射容器内应用的服务端口到本地宿主主机;另一个是互联机制实现多个容器间通过容器名来快速访问. 1.端口映射实现访 ...

  8. docker 实践五:端口映射和容器互联

    本篇是关于 docker 容器的端口映射和容器之间的互联内容. 注:环境为 CentOS7,docker 19.03. docker 的容器除了能连接网络外,在许多时候,我们需要让多个容器来协同完成任 ...

  9. docker端口映射,批量删除容器

    docker端口映射 http://blog.csdn.net/yjk13703623757/article/details/69212521 批量删除容器 http://blog.csdn.net/ ...

随机推荐

  1. laravel 视图流程控制,if switch for loop

    流程控制 除了模板继承和数据显示之外,Blade 还为常用的 PHP 流程控制提供了便利操作,例如条件语句和循环,这些快捷操作提供了一个干净.简单的方式来处理 PHP 的流程控制,同时保持和 PHP ...

  2. 顺序表应用3:元素位置互换之移位算法(SDUT 3326)

    题解:用一个for,循环m次,每次都把最前面的放到最后面,就可以了. #include <stdio.h> #include <stdlib.h> #include <s ...

  3. return返回方法值:狮子玩具

    public class Lion { String color ="黄色"; public void run(){ System.out.println("正在以0.1 ...

  4. DRL Hands-on book

    代码:https://github.com/PacktPublishing/Deep-Reinforcement-Learning-Hands-On Chapter 1 What is Reinfor ...

  5. 【全网最优方法】JAVA初学:错误: 找不到或无法加载主类HelloWorld

    JAVA初学:错误: 找不到或无法加载主类 HelloWorld 我这是看的黑马2019网课(B站)出现的问题. 放一下别人的图,我也是大概的问题:就是javac没问题,java却无论怎么弄都报错. ...

  6. Python基于Pymssql模块实现连接SQL Server数据库的方法

    首先,安装pymssql第三方库pip install pymssql 其次,导入pymssql库 最后们就可以连接数据库了 import pymssql server = "10.10.9 ...

  7. python:BeautifulSoup学习

    上一篇说到用BeautifulSoup解析源代码,下面我们就来实战一下: from bs4 import BeautifulSoup html = urllib.request.urlopen('ht ...

  8. koa 基础(十六)koa 中 session 的使用

    1.app.js /** * koa 中 session 的使用 * 1.npm install koa-session --save * 2.const session = require('koa ...

  9. OSI的七层模型和TCP/IP的五层模型

    OSI七层模型: 应用层->表示层->会话层->传输层->网络层->数据链路层->物理层 TCP/IP五层模型: 应用层->传输层->网络层->数 ...

  10. MVC和MVP区别

    从这幅图可以看到,我们可以看到在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑. 在MVC模型里,更关注的Model的不变,而同时有 ...