docker容器间的互联问题

 更新时间:2023年05月18日 16:17:03   作者:莱特昂  
这篇文章主要介绍了docker容器间的互联问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

docker容器间互联

单机部署的时候考虑,能不能使docker各个容器间互通呢。比如我的web应用容器可以和db容器间互通,而不是现在这样再web应用调用本机ip去访问。

网上查了一下还真有这种方法。

还有两种方法:

1、links

在容器启动时,启动命令中加入links指定链接的容器:

docker run -itd --name nginx-web02 --link nginx-web:nginx01 -p 81:81 sunmmi/nginx nginx

run容器nginx-web02时,link容器nginx-web,其中nginx-web:nginx01前面是链接哪个容器名,后面是对这个容器别名.

进入nginx-web02容器,查看hosts文件,nginx-web,nginx01已经增加到hosts文件中.

[root@37e693a5f7a3 /]# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  nginx01 7d89f9196f78 nginx-web
172.17.0.3  37e693a5f7a3

此时在容器1中就能通过别名直接Ping通容器2了。

测试:

[root@37e693a5f7a3 /]# ping nginx01
PING nginx01 (172.17.0.2) 56(84) bytes of data.
64 bytes from nginx01 (172.17.0.2): icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from nginx01 (172.17.0.2): icmp_seq=2 ttl=64 time=0.170 ms

2、network

第二种也是在容器启动时,启动命令中加入network指定局域网络:

首先创建一个新的 Docker 网络:

$ docker network create -d bridge my-net

运行一个容器并连接到新建的 my-net 网络

$ docker run -it --rm --name busybox1 --network my-net busybox sh

打开新的终端,再运行一个容器并加入到 my-net 网络

$ docker run -it --rm --name busybox2 --network my-net busybox sh

下面通过 ping 来证明 busybox1 容器和 busybox2 容器建立了互联关系。在 busybox1 容器输入以下命令

/ # ping busybox2
PING busybox2 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.118 ms

用 ping 来测试连接 busybox2 容器,它会解析成 172.19.0.3。同理在 busybox2 容器执行 ping busybox1,

/ # ping busybox1
PING busybox1 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.064 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.143 ms

这样,busybox1 容器和 busybox2 容器建立了互联关系。

network 官方 docker-compose.yml ,替换links的方法:

network固定子网络Ip

适用于链接redis等需要固定ip的场景,需要设置两点1、容器的networks:ipv4_address,再单独配置networks:config:subnet,gateway,参照下面实例:

version: "3.9"
networks:
  loki:
    ipam:
      driver: default
      config:
      # 子网络
        - subnet: "172.22.0.0/24"
          gateway: 172.22.0.1
services:
  resty:
    image: beyond147896/resty:latest
    ports:
      - "80:80"
      - "443:443"
    networks:
      loki:
      	# 固定子网ip,网段必须在子网络172.22.*.*
        ipv4_address: 172.22.0.2
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    networks:
      loki:
        # 固定子网ip,网段必须在子网络172.22.*.*
        ipv4_address: 172.22.0.99

在web应用的配置中也可以直接写上面配置的ipv4_address固定Ip连通。

如果首次启动出现报错,可能是docker-compose的版本不够高,升级版本后可能可以解决。

如果第二次启动出现报错,可能是网络占用,使用docker-compose up之后,docker-compose会创建一个名称为: {项目名}_{网络名} 的网络,一旦创建了这个网络,docker-compose 将永远不会删除它。

所以当修改了docker-compose.yaml文件后,第二次运行docker-compose up时,使用的还是之前创建的loki_loki网络。

解决方法

将之前创建的网络手动删除:

$ docker network rm loki_loki
$ docker-compose up

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker搭建Redis5.0并挂载数据

    Docker搭建Redis5.0并挂载数据

    本文主要介绍了Docker搭建Redis5.0并挂载数据,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • 更改docker默认数据目录的方法步骤

    更改docker默认数据目录的方法步骤

    本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • 解决nacos启动时防火墙开启8848的坑

    解决nacos启动时防火墙开启8848的坑

    最近操作Nacos时遭遇8848端口无法访问的问题,尝试通过安全组和firewall配置仍无法解决,最终发现,firewall对Docker使用专门的作用域,需要在相应作用域下开放端口,务必检查firewall中针对Docker的设置,确保8848端口在正确的作用域内被允许通行
    2022-10-10
  • Docker中优化Mysql运行内存的操作

    Docker中优化Mysql运行内存的操作

    这篇文章主要介绍了Docker当中优化Mysql运行内存的操作,经过一番操作可以优化为只占用100mb内存,具体优化方法及技巧跟随小编一起看看吧
    2022-01-01
  • docker 如何修改mysql的root密码

    docker 如何修改mysql的root密码

    这篇文章主要介绍了docker 修改mysql的root密码操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Deepin使用docker安装mysql数据库过程详解

    Deepin使用docker安装mysql数据库过程详解

    这篇文章主要介绍了Deepin使用docker安装mysql数据库过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 详解在Docker容器中运行Spring Boot应用

    详解在Docker容器中运行Spring Boot应用

    本文将以一个最简单的Spring Boot开发的Web应用为例,讲解如何将其容器化运行。本文的重点是构建Docker镜像、运行Docker容器。
    2017-06-06
  • docker容器中布置静态网站的实现

    docker容器中布置静态网站的实现

    这篇文章主要介绍了docker容器中布置静态网站的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • CoreOS配置Docker镜像加速器的方法

    CoreOS配置Docker镜像加速器的方法

    本篇文章主要介绍了CoreOS配置Docker镜像加速器的方法,CoreOS下的Docker配置是通过flannel unit来实现的,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 在windows下的安装Docker的教程

    在windows下的安装Docker的教程

    这篇文章主要介绍了在windows下的安装Docker的教程,注意只能是64的系统,需要的朋友可以参考下
    2015-12-12

最新评论