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容器的层的概念

    详解docker容器的层的概念

    这篇文章主要介绍了详解docker容器的层的概念,帮助大家更好的理解和学习使用docker容器,感兴趣的朋友可以了解下
    2021-04-04
  • docker环境下数据库的备份(postgresql, mysql) 实例代码

    docker环境下数据库的备份(postgresql, mysql) 实例代码

    这篇文章主要介绍了docker环境下数据库的备份(postgresql, mysql) ,需要的朋友可以参考下
    2019-05-05
  • docker容器设置时区的几种方式小结

    docker容器设置时区的几种方式小结

    Docker的基础镜像设置大多是Etc/UTC,也就是标准的UTC 时间,所以要简单的调整一下,本文主要介绍了docker容器设置时区的几种方式小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • Docker部署Mysql数据库步骤详解

    Docker部署Mysql数据库步骤详解

    Docker是一种流行的容器化平台,可以简化应用程序的部署和管理,在本博客中,我们将探讨如何使用Docker部署两个广泛使用的数据库:MySQL,我们将提供详细的步骤和相应的命令,以帮助您轻松地在Docker容器中设置和运行这个数据库
    2023-07-07
  • Docker多个容器不能有相同端口号的处理方案

    Docker多个容器不能有相同端口号的处理方案

    这篇文章主要介绍了Docker多个容器不能有相同端口号的处理方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Docker 数据卷及数据容器详细介绍及示例

    Docker 数据卷及数据容器详细介绍及示例

    这篇文章主要介绍了Docker 数据卷及数据容器详细介绍及示例的相关资料,Docker 很强大,不仅部署维护提高效率,docker和宿主之间的数据共享以及docker间的数据共享需要好好研究一下,需要的朋友可以参考下
    2016-11-11
  • Docker化Spring Boot应用的实践

    Docker化Spring Boot应用的实践

    本文主要介绍了Docker化Spring Boot应用的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • docker内服务访问宿主机服务的实现

    docker内服务访问宿主机服务的实现

    本文主要介绍了docker内服务访问宿主机服务的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Docker基本概念和底层原理解析

    Docker基本概念和底层原理解析

    Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器,本文给大家介绍docker概念和底层原理,感兴趣的朋友一起看看吧
    2022-03-03
  • Docker容器harbor私有仓库部署和管理

    Docker容器harbor私有仓库部署和管理

    这篇文章主要介绍了Docker容器harbor私有仓库部署和管理,文章围绕主题展开详细的内容介绍,具有一定的的参考价值,需要的朋友可以参考一下
    2022-08-08

最新评论