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如何部署etcd集群

    docker如何部署etcd集群

    这篇文章主要介绍了docker如何部署etcd集群问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 一些常见的精简Docker file规则总结

    一些常见的精简Docker file规则总结

    这篇文章主要介绍了一些常见的精简Docker file规则的相关资料,这些精简规则有助于优化Dockerfile,生成更高效、简洁的镜像,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-11-11
  • docker-compose集成Jenkins部署,打包,发布方式

    docker-compose集成Jenkins部署,打包,发布方式

    在Docker环境中安装配置Jenkins,需挂载JDK、Maven等至容器指定路径,设置国内镜像提升下载速度,并添加插件与凭据完成环境配置
    2024-10-10
  • 使用Docker构建Python FastAPI镜像的最佳实践

    使用Docker构建Python FastAPI镜像的最佳实践

    本文分享了优化Python FastAPI应用Docker部署的关键技巧:使用slim基础镜像减小体积,通过多阶段构建分离编译与运行环境,利用.dockerignore排除无关文件,推荐采用非root用户运行增强安全性,需要的朋友可以参考下
    2026-02-02
  • Docker端口冲突5步快速定位并解决容器端口占用难题

    Docker端口冲突5步快速定位并解决容器端口占用难题

    ocker容器端口冲突是部署中的常见问题,通常因指定主机端口被其他进程或容器占用导致,这篇文章主要介绍了Docker端口冲突5步快速定位并解决容器端口占用难题的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-04-04
  • docker基础知识之挂载本地目录的方法

    docker基础知识之挂载本地目录的方法

    本篇文章主要介绍了docker基础知识之挂载本地目录的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 基于docker安装mariadb配置过程解析

    基于docker安装mariadb配置过程解析

    这篇文章主要介绍了基于docker安装mariadb配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • docker搭建Mycat实现读写分离的项目实践

    docker搭建Mycat实现读写分离的项目实践

    本文主要介绍了docker搭建Mycat实现读写分离的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Docker实现Mariadb分库分表及读写分离功能

    Docker实现Mariadb分库分表及读写分离功能

    这篇文章主要给大家介绍了关于Docker实现Mariadb分库分表及读写分离功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • docker swarm外部验证负载均衡时不生效的解决方案

    docker swarm外部验证负载均衡时不生效的解决方案

    这篇文章主要介绍了docker swarm外部验证负载均衡时不生效的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04

最新评论