docker network实现容器间访问的简单配置

Nacos微服务注册地址为Docker内网IP的解决办法 Nacos微服务注册中心无法调用Docker容器中的服务 前言: Nacos(注册中心)是通过 【 IP+PORT】 的形式调用其他服务。 问题: Docker容器使用虚拟IP, 当Docker中的服务A,向Nacos注册的时候,Nacos获取到了Docker的内部IP, 导致另外一个服务B,想通过注册中心调用服务A, 但由于服务B从nacos注册中心获取到的是服务A的内部IP,这样导致了... 阅读详情

目录

环境:

安装docker

配置docker镜像加速

安装docker-compose

创建网络

配置应用

方式一、

主要关注点:

方式二、

链接方法:


环境:

阿里云服务器,centos8(docker更喜欢8)

这里是docker-compose直接启动的docker容器,非docker swarm集群。

以三个容器为例,nginx,msyql,java服务

前提安装docker及docker-compose

顺带顺一下docker的安装配置

 

安装docker

可以参考菜鸟教程:

https://www.runoob.com/docker/centos-docker-install.html

开机启动:

#开机启动
systemctl enable docker

#启动docker
systemctl start docker.service
#重启docker
systemctl restart docker.service
#停止docker
systemctl stop docker.service

配置docker镜像加速

添加自定义配置文件:

cd /etc/docker

vim daemon.json

vim daemon.json

添加一下内容: (这里只加了网易和百度云的镜像,如果你有阿里云的可以参考菜鸟教程中的吧阿里的仓库地址也加上)

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

重启docker:

systemctl restart docker.service

查看信息 执行

docker info

Registry Mirrors:

https://hub-mirror.c.163.com/

https://mirror.baidubce.com/

安装docker-compose

查看最新版本:https://github.com/docker/compose/releases

目前是:1.27.4

执行命令安装

`curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose`

 

以下进入正题:

创建网络

创建名为net-ehooyun的bridge网络,适用于单机内部。overlay网路是集群用的。

docker network create -d bridge net-ehooyun

详情或测试方法可以参照:

https://www.runoob.com/docker/docker-container-connection.html

配置DNS:

参照菜鸟:

https://www.runoob.com/docker/docker-container-connection.html

编辑上边提到的daemon.json ,加入dns配置即可

vim /etc/docker/daemon.json

编辑后内容如下:

{
  "registry-mirrors": [
    "https://imhqgpul.mirror.aliyuncs.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "dns" : [
    "114.114.114.114",
    "8.8.8.8"
  ]
}

设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。

配置完,需要重启 docker 才能生效。

查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息:

docker run -it --rm  ubuntu  cat etc/resolv.conf

配置应用

开始配置应用的docker-compose文件

方式一、

三个服务在一个docker- compose文件中如下:

docker-compose.yml

version: '3.3'
services:
   nginx:
    image: nginx
#    hostname: nginx
    #image: nginx:1.19.1-alpine
    container_name: nginx
    restart: always
    privileged: true
    environment:
      - TZ=Asia/Shanghai 
    ports:
#      - 8080:80
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      #- /ehooyun/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro
      - /ehooyun/nginx/conf.d:/etc/nginx/conf.d
      - /ehooyun/logs/nginx:/var/log/nginx
      - /ehooyun/nginx/dist:/opt/dist:ro
    networks:
      - net-ehooyun
      
  # 指定服务名称
   diamond:
    # 指定服务使用的镜像
    image: diamond
#    hostname: diamond
    # 指定容器名称
    container_name: diamond
    # 指定服务运行的端口
    ports:
    - target: 8080
      published: 8080
      mode: host
    # 指定容器中需要挂载的文件
    volumes:
      - /etc/localtime:/etc/localtime
      - /ehooyun/logs/diamond:/var/logs
    networks:
      - net-ehooyun
      
   mysql:
#    network_mode: "host"
#    hostname: mysql
    restart: always
    container_name: mysql
    image: mysql:5.7
    command: 
     --lower_case_table_names=1
     --character-set-server=utf8mb4
     --collation-server=utf8mb4_unicode_ci
     --explicit_defaults_for_timestamp=true
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: qwe123123fasdfa
      #MYSQL_USER: 'ehoonyun'
      #MYSQL_PASS: 'ehooyun12123'
    ports:
     - 3306:3306
    volumes:
     - /ehooyun/mysql/data:/var/lib/mysql
     - /ehooyun/mysql/config:/etc/mysql/conf.d
     - /ehooyun/mysql/log:/var/log/mysql
    networks:
      - net-ehooyun
      
      
networks:
    net-ehooyun:
       external:  true

启动命令:

docker-compose -f /ehooyun/compose/docker-compose.yml up -d

启动所有服务后可以看java服务是否能连上myql

或者通过配置网络那还不的测试方法测试一下。进入容器使用ping mysql 或者curl mysql的方式来测试一下是否互通。

 

主要关注点:

  • 每个service的   

networks:
      - net-ehooyun

  • 最终的

networks:
    net-ehooyun:
       external:  true

就ok了,

方式二、

由于单个服务经常单独重启,所以我也为内个服务单独创建了compose文件,单独使用的话可以如下拆分:

mysql:

docker-compose-mysql.yml

version: '3.3'

services: 
  mysql:
#    network_mode: "host"
#    hostname: mysql
    restart: always
    container_name: mysql
    image: mysql:5.7
    command: 
     --lower_case_table_names=1
     --character-set-server=utf8mb4
     --collation-server=utf8mb4_unicode_ci
     --explicit_defaults_for_timestamp=true
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: qwe12312331afadf
      #MYSQL_USER: 'ehoonyun'
      #MYSQL_PASS: 'ehooyun12123'
    ports:
     - 3306:3306
    volumes:
     - /ehooyun/mysql/data:/var/lib/mysql
     - /ehooyun/mysql/config:/etc/mysql/conf.d
     - /ehooyun/mysql/log:/var/log/mysql
    networks:
      - net-ehooyun
      
networks:
    net-ehooyun:
       external:  true

java:

docker-compose-diamond.yml

version: '3.3'

services:
  # 指定服务名称
  diamond:
    # 指定服务使用的镜像
    image: diamond
    hostname: diamond
    # 指定容器名称
    container_name: diamond
    # 指定服务运行的端口
    ports:
    - target: 8080
      published: 8080
      mode: host
    # 指定容器中需要挂载的文件
    volumes:
      - /etc/localtime:/etc/localtime
      - /ehooyun/logs/diamond:/var/logs
    networks:
      - custom_net
      
networks:
  custom_net:
   external:
      name: net-ehooyun

nginx: 

docker-compose-nginx.yml

version: '3'

services:
  nginx:
    image: nginx
    hostname: nginx
    #image: nginx:1.19.1-alpine
    container_name: nginx
    restart: always
    privileged: true
    environment:
      - TZ=Asia/Shanghai 
    ports:
#      - 8080:80
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      #- /ehooyun/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro
      - /ehooyun/nginx/conf.d:/etc/nginx/conf.d
      - /ehooyun/logs/nginx:/var/log/nginx
      - /ehooyun/nginx/dist:/opt/dist:ro
    networks:
      - net-ehooyun
      
      
networks:
    net-ehooyun:
       external: true

 

链接方法:

访问的时候通过service名当做hostname访问即可。

比如java项目中写mysql地址就可以直接写mysql代替ip地址:

    url: jdbc:mysql://mysql:3306/diamond?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&allowMultiQueries=true

这样可以实现容器间互通,内网调用无需解析ip,提高速度。

这里发现可以不用指定hostname,这样就默认使用service名称来作为host访问。

docker常用命令:

docker ps // 查看所有正在运行容器
docker stop containerId // containerId 是容器的ID 
docker ps -a // 查看所有容器 $ docker ps -a -q // 查看所有容器ID 
docker stop $(docker ps -a -q) //  stop停止所有容器 
docker rm $(docker ps -a -q) //   remove删除所有容器

 

docker容器间的网络连接 docker容器间的网络连接概述Legacy Linking连接步骤命令Bridge Network连接步骤命令示例相关命令 概述 容器间的连接方式目前了解到的有两种。 Legacy Linking:使用容器名进行连接,实际上它创建了一个桥接的网络,在这个网络里,容器之间可以相互通信。 Bridge Network:这种方式创建了一个自定义的桥接网络,它的类型是isolated network(隔离网络),只有在这个网络里的的容器才能相互通信。 Legacy Linking 连接步骤 运行一个容器,需要给 阅读详情

相关推荐

基于LSTM语义分析的企业风险预测系统

在数字化时代,企业面临着前所未有的挑战和机遇,而风险管理作为确保企业稳定发展的关键一环,其重要性日益凸显。为了及时、准确地监测和分析企业相关的风险,并预测可能带来的风险,本文介绍了一种基于长短期记忆(LSTM)语义分析的企业风险预测系统。该系统利用深度学习技术,通过将收集到的企业数据进行预处理和分析,结合LSTM模型对文本进行深度语义分析,从而实现对潜在风险的预测和评估。系统设计方面,该系统包括数据预处理、LSTM模型构建与训练、风险预测以及可视化展示等模块。

qiufangtaowvnyyidtf的博客 1392

docker 日常命令小笔记

home/wwwroot/ops-driver-operation-team/docker 快捷路径 www。文件挂载路径 /media/sf_test 快进路径 lanwww。

大海技术博客 1119

Miniconda3迁移(附图详细过程)

服务器上目录占满,想要将conda迁移到其他目录下的操作方法,详细教程。

2301_77554343的博客 6942

docker下不同容器的网络互相访问问题

docker及docker-compose下不同容器网络互相访问问题

Ricardo.M.Yu的博客 3815

国产大模型 coding plan 实战决策指南:GLM、Kimi、豆包、abab 四大模型分层选型与工程落地

大模型辅助编程(coding assistant)正从概念验证走向规模化工程落地,其核心已不再是‘能否生成代码’,而是‘如何在真实开发流程中精准赋能’。理解模型能力边界、匹配技术栈特征、构建分层工作流(L1行级补全/L2函数生成/L3模块重构),是实现稳定提效的关键。GLM系列以工程稳定性见长,适合代码审计与测试生成;Kimi-Max凭借200K超长上下文胜任深度重构与合规审查;豆包响应快、框架适配深,是IDE高频补全的理想选择;abab系列则在IoT固件等跨模态场景中展现独特价值。本文聚焦国产模型在金融、

weixin_32238157的博客 428

2024年CSP-X复赛真题题解(T1:购物)

2024年CSP-X复赛真题题解(T1:购物)

王老师青少年编程 1180

Docker Swarm【二】建立网络

创建自定义网络 无法通过名字匹配域名,所以需要创建网络 docker network create -d overlay my-self-overlay 删除之前创建的服务 docker service rm nginx test1 在刚刚创建的网络创建容器 docker service create --network my-self-overlay --name nginx -p 8080:80 nginx 创建 alpine docker service create --network

廖圣平 980

UG\NX二次开发 一个创建小平面体的例子

介绍。

王牌飞行员_里海的博客 444

Docker网络 - docker network详解

Docker Network - docker network details

Trollz的博客 3万+

FPGA和USB3.0通信-USB3.0 PHY介绍

可以和FPGA搭配使用的USB3.0 PHY芯片通过之前的介绍<FPGA和USB3.0通信-USB3.0协议介绍USB3.0 PHY简介首先我们需要了解PHY具体完成哪些工作以及我利...

OpenFPGA的博客 4940

MATLAB 基于深度学习的步态识别算法仿真

步态识别是一种通过分析人体行走方式来识别身份的技术。基于深度学习的步态识别算法利用卷积神经网络 (CNN) 提取步态特征,并通过分类器进行身份识别。基于深度学习的步态识别算法是实现身份识别的重要手段,具有广泛的应用前景。MATLAB 提供了丰富的工具和函数,可以方便地进行算法仿真和性能评估。

走向CTO的路上... 518

docker-compose 如何访问外部容器? docker容器间访问的网络设置浅谈

前言 docker-compose是用于定义和运行多容器 Docker 应用程序的工具,通过docker-compose可以方便地协调多个容器的运行。 一般在使用docker-compose启动服务时,被同一个docker-compose.yml定于的服务(容器)会运行在一个隔离环境中,也就是说在这个环境中的容器是不能直接访问(如果没有设置的话)当前docker-compose外部的其它容器的,那么如何设置才能使compose中的容器访问外部容器呢? 本文以能够使compose启动的容器可以访问docker

soulfire的博客 1万+

matlab 一维相位解缠

一维相位解缠算法的matlab代码实现。

点云侠的博客 372

Docker 1.9 Overlay Network实现跨主机网络互通

11月4日,Docker发布了1.9版本,实现了原本实验性的Networking组件的支持。用户可以在Swarm中使用它或者将其作为Compose 工具。创建虚拟网络并将其连接到容器上,可实现多个主机上容器相互通信,并且实现不同的应用程序或者应用程序不同部分能够相互隔离。互联子系统设计为可插拔式,兼容VXLAN或者IPVLAN等技术。 Docker 容器实现跨主机通讯主要通过几种方式:自

jasko的专栏 6836

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Docker网络network详解

一文了解docker四大网络模式、网络操作基本命令和使用场景

qq_44749491的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Docker Swarm实现跨宿主机容器间访问

使用Docker Swarm实现跨宿主机容器间访问 背景: 在SerA服务器,运行了一个任务调度系统xxl容器ConA。 在SerB服务器,运行了一个SpringBoot服务ConB,注册到任务调度系统中。 在任务调度系统中,看到的调度器节点IP是SerB服务器分配给ConB容器的IP地址。 导致任务调度系统调度失败,提示ConB地址链接不上。 分析下来,是由于ConA和ConB是跨宿主机的容器,无法通信。 网上看到了很多方案,包括Overlay网络、OpenvSwitch、consul方案等,最终

水岸梦城 技术博客 3279

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Docker Network 命令:容器网络管理的完整指南

本文全面介绍了Docker网络管理的关键命令和最佳实践。主要内容包括:Docker网络架构概述(桥接/主机/overlay网络类型)、核心命令操作(网络创建/查看/连接)、高级配置。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

Docker容器网络配置全攻略:桥接、Host、container 一网打尽!_docker网络配置host,容器间怎么引用

Docker的host网络模式是另一种网络模式,与bridge模式不同,它将容器直接融入到主机的网络栈中,使得容器直接使用主机的网络接口和IP地址。它提供了多种网络模式和配置选项,使得容器可以与其他容器、主机以及外部网络进行通信,在实际应用中,通过选择合适的网络类型和配置参数,可以构建高效、安全、可扩展的Docker网络解决方案。其中,是想要容器连接的网络的名称,是创建和启动容器时可能需要的其他参数(如容器名称、端口映射等),是要运行的Docker镜像的名称。

2401_87287876的博客 3284

Docker篇之docker容器之间的通信

自从Docker容器工具诞生以来,当我们在正式线上环境进行容器部署以及容器管理任务时,通常容器之间是需要进行数据通信的,来支撑正常业务运转。因此容器间的通信也随之成为热点,也是生产环境中的重中之重。 容器间的网络通信可分为两大方面:单主机容器上的相互通信,跨主机的容器相互通信。 一、Docker单主机容器通信 1、假设通过容器ip访问 【不可行】 由于docker容器每次在重启后,其IP会发生变化。因此通过容器ip访问不可行。 2、假设通过宿主机的ip:port访问 【不可行】 通过宿主机的ip:port

小橙子的笔记屋 7403

【Docker】(六)使用network完成容器间的网络通信

本篇主要讲述了bridge类型的网络驱动是如何使用的,自定义的bridge相对于默认的bridge自带DNS服务可以动态的连接容器或断开容器而不需要重启可以有效的隔离不同的应用组而对于host类型的网络驱动来说,由于或占用主机的端口,而且不能动态指定端口,很容易端口冲突,我们一般不选择这种使用方式。overlay类型的驱动,主要是用在多机多容器的网络通信场景,由于管理比较复杂,一般是配合多机容器编排机制 Docker Swarm来使用的,在后续的博客中会继续讲述。

积木成林,聚沙成塔 1544

Docker从容器中项目如何访问到宿主机MYSQL

Docker从容器中项目如何访问到宿主机MYSQL

风水道人 1万+

docker容器之间通讯-network

docker为容器创建独立的网络环境,实现宿主和容器、容器之间的网络隔离,默认使用bridge模式的网络,实现容器之间、容器与宿主机之间、乃至与外界之间 的网络通信。 但是我们在实际部署应用的时候,发现并不能直接通过容器内部端口访问另外一个容器的应用(比如:mysql容器端口是3306,web应用不能直接通过3306访问mysql),而是通过端口映射到宿主机器来实现容器之间的访问。 那么有什么方式能实现直接通过容器内部端口进行数据通讯呢?那就是通过network方式。 docker network创建一个桥

古甲哈醒的专栏 4320

docker-compose 解决容器间相互通信,例如:容器内项目访问其他容器的mysql

最近使用docker部署的项目,遇到容器间相互通信的问题,遂整理处理以便后续使用。我的应用场景是mysql数据库和springboot项目分别使用不同的docker容器启动,这样导致springboot项目访问数据库受限,期间采用过多种方式都未解决,最后使用docker-compose启动方式完美解决问题。 至于安装docker和docker-compose请自行百度,这里不再讲解。 这里直接贴上docker-compose.yml配置 -links参数是保证容器间通信的关键 version: '

yanzi920403的博客 2万+

Docker容器间的网络通信

Docker Network简单记录下容器间的网络通信。Docker Network 网络驱动 BRIDGE 容器与外部的网络通信前提 宿主机与容器的端口映射 容器间的网络通信 使用自己创建的NETWORK 不同NETWORK间的容器通信 容器DNS 默认bridge网络 用户创建的bridge网络 网络层可见别名 参考网络驱动 network drivers是docker提供容器间网络通

8爱生活 5024

6 实现多主机间 Docker 容器通信

目录 1 iptables简介 1.1 基本操作指令 1.2 iptables 工作流程 2 实现多主机间Docker容器通信 1 目标 2操作步骤总结 3 具体操作步骤 1 iptables简介 iptables很重要,但是我还没未进行详细学习,这里这是介绍个大概,后续进行补充完善。 iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫n.

Frank的博客 935

mac连接docker容器 docker-mac-network

mac是不能直接ping docker 容器的ip的,能通过映射端口。但是有些情况下我们需要直接请求容器的ip 网上找了方法记录一下 他们使用的是github里的这个东西,还有docker,这个需要你提取装好 docker-mac-network 步骤0 安装这个客户端vpn的客户端 brew cask install tunnelblick 步骤1 在mac电脑下找个目录clone下,并且进入...

zhyke 4001
上一篇: Mac全自动安装brew一键配置国内镜像源
下一篇: iTerm2启动提示:zsh compinit: insecure directories, run compaudit for list.需要输入y的问题
grootblockchain
博客等级 码龄11年 55粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值