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

 更新时间:2017年03月01日 10:31:22   作者:tailnode  
本篇文章主要介绍了详解docker容器间通信的一种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

以我的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多个容器不能有相同端口号的处理方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Spring Boot Docker打包工具小结

    Spring Boot Docker打包工具小结

    本文对几种常见的Spring Boot Docker打包工具进行了简单总结,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • 使用Docker多阶段构建来减小镜像大小的方法

    使用Docker多阶段构建来减小镜像大小的方法

    这篇文章主要介绍了使用Docker多阶段构建来减小镜像大小的方法,适用于需要在 Dockerfile 中构建程式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Docker容器内不能联网的6种解决方案

    Docker容器内不能联网的6种解决方案

    今天小编就为大家分享一篇关于Docker容器内不能联网的6种解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Docker容器网络地址的创建修改

    Docker容器网络地址的创建修改

    Docker提供了一个方便的方式来配置容器的网络地址,在本文中,我们将介绍如何修改Docker容器的网络地址,本文主要介绍了Docker容器网络地址的创建修改,感兴趣的可以了解一下
    2024-01-01
  • 深入理解Docker Load和Docker Import的区别详解

    深入理解Docker Load和Docker Import的区别详解

    Docker是一个流行的容器化平台,提供了丰富的命令和功能,其中docker load和docker import是两个常用的命令,用于加载Docker镜像,这篇文章主要给大家介绍了关于Docker Load和Docker Import区别的相关资料,需要的朋友可以参考下
    2024-03-03
  • 一台虚拟机基于docker搭建大数据HDP集群的思路详解

    一台虚拟机基于docker搭建大数据HDP集群的思路详解

    这篇文章主要介绍了一台虚拟机基于docker搭建大数据HDP集群 ,本篇文章主要讲了大数据集群搭建的架构设计和实现思路部分,后面文章会探讨上层应用的构建,需要的朋友可以参考下
    2022-11-11
  • docker中nginx的location转发不生效的解决

    docker中nginx的location转发不生效的解决

    这篇文章主要介绍了docker中nginx的location转发不生效的解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Docker安装Nginx并部署及MySQL容器构建全过程

    Docker安装Nginx并部署及MySQL容器构建全过程

    众所周知Docker是一种容器化技术,可以用来快速部署和管理应用程序,这篇文章主要给大家介绍了关于Docker安装Nginx并部署及MySQL容器构建的相关资料,需要的朋友可以参考下
    2024-02-02
  • 在docker上安装运行mysql实例

    在docker上安装运行mysql实例

    Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
    2017-01-01

最新评论