详解docker容器间通信的一种方法

发布时间 - 2026-01-10 23:21:00    点击率:

以我的ghost博客为例进行说明,我在VPS上用docker启动了两个ghost博客,还有一个Nginx做反向代理,将两个域名分别指向两个博客。

docker启动命令

ghost:

docker run -e NODE_ENV=production --name ghost1 -v /path/to/data/ghost/ghost1/:/var/lib/ghost -d ghost
docker run -e NODE_ENV=production --name ghost2 -v /path/to/data/ghost/ghost2/:/var/lib/ghost -d ghost

nginx:

复制代码 代码如下:
docker run -p 80:80 --name nginx --link ghost1 --link ghost2 -v /path/to/data/nginx/nginx.conf:/etc/nginx/nginx.conf -d nginx

先启动两个ghost,然后启动nginx。使用--link参数将容器“链接”到一起,此参数会在容器中加入环境变量并在/etc/hosts中插入一条容器名与IP的映射

root@fabfd4bacfda:/# cat /etc/hosts
172.17.0.3   ghost1 d19c0134011a
172.17.0.5   ghost2 0e2e66ba70e0
172.17.0.4   fabfd4bacfda

设置nginx反向代理

修改nginx.conf,在http段内添加如下内容

http {
  server {
    listen 80;
    server_name www.domain1.tk domain1.tk;

    location / {
      proxy_pass http://ghost1:2368;
      proxy_redirect   off;
      proxy_set_header  Host       $host;
      proxy_set_header  X-Real-IP    $remote_addr;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
  server {
    listen 80;
    server_name www.domain2.tk domain2.tk;

    location / {
      proxy_pass http://ghost2:2368;
      proxy_redirect   off;
      proxy_set_header  Host       $host;
      proxy_set_header  X-Real-IP    $remote_addr;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }

}

注意proxy_pass的值proxy_pass http://ghost2:2368;。 ghost2是nginx容器/etc/hosts中的一条,是由--link参数添加进来的。

设置完这些后,nginx就会将两个域名的请求分别代理到两个博客中。

补充

容器重启后IP可能变化,所以直接在nginx.conf中指定IP并不是一个好方法。使用--link时hosts文件会随着容器IP的变化更新,所以使用域名才是更容易维护的方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# docker  # 容器通信  # 容器之间通信  # docker容器间通信  # 详解Docker容器跨主机通信的方法  # 详解Docker 容器跨主机多网段通信解决方案  # Docker容器连接相互通信的实现  # Docker容器间通信与外网通信的操作  # Docker容器之间的通信的方法实现  # 聊聊docker跨主机之间容器通信问题  # Docker网络及容器通信原理详解  # Docker网络模型以及容器通信详解续篇  # Docker 容器之间的互相通信实现示例  # 博客  # 是一个  # 我在  # 才是  # 是由  # 会在  # 并在  # 还有一个  # 为例  # 更容易  # 重启  # 会将  # 大家多多  # 段内  # 启动了  # nginx  # lib  # data  # var  # span 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何实现建站之星域名转发设置?  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  智能起名网站制作软件有哪些,制作logo的软件?  Laravel如何配置和使用缓存?(Redis代码示例)  如何解决hover在ie6中的兼容性问题  如何在万网利用已有域名快速建站?  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  ,在苏州找工作,上哪个网站比较好?  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  什么是javascript作用域_全局和局部作用域有什么区别?  如何快速搭建FTP站点实现文件共享?  C++时间戳转换成日期时间的步骤和示例代码  Android自定义listview布局实现上拉加载下拉刷新功能  如何快速搭建高效香港服务器网站?  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Python结构化数据采集_字段抽取解析【教程】  Android滚轮选择时间控件使用详解  iOS验证手机号的正则表达式  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  微信小程序 五星评分(包括半颗星评分)实例代码  JS碰撞运动实现方法详解  Laravel如何优化应用性能?(缓存和优化命令)  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  MySQL查询结果复制到新表的方法(更新、插入)  如何为不同团队 ID 动态生成多个“认领值班”按钮  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Laravel如何发送系统通知?(Notification渠道示例)  Python图片处理进阶教程_Pillow滤镜与图像增强  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel怎么为数据库表字段添加索引以优化查询  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何构建满足综合性能需求的优质建站方案?  油猴 教程,油猴搜脚本为什么会网页无法显示?  javascript中闭包概念与用法深入理解  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  七夕网站制作视频,七夕大促活动怎么报名?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  Swift中循环语句中的转移语句 break 和 continue  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  如何在Windows虚拟主机上快速搭建网站?  文字头像制作网站推荐软件,醒图能自动配文字吗?