前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跨 docker-compose.yml 配置的 Docker 容器之间的网络互通

跨 docker-compose.yml 配置的 Docker 容器之间的网络互通

作者头像
zgq354
发布2021-06-02 10:05:36
7.9K0
发布2021-06-02 10:05:36
举报
文章被收录于专栏:0x00010x0001

背景

一个服务器上分别用单独的 docker-compose.yml 配置了两个单机网站项目

  1. 网站项目(有 nginx、php-fpm、MySQL 等容器)
  2. caddy 反向代理

现在希望 caddy 的容器可以反向代理到项目1里面的 nginx 上,这就涉及到了容器网络互通的问题。

原配置

项目1的配置:

代码语言:javascript
复制
version: "3.6"
services:
  nginx:
    image: nginx:latest
    build: ./nginx
    container_name: site-nginx
    restart: always
    ports:
      - 8080:80
      - 8443:443
    volumes:
      - ./logs:/var/log/nginx
      - ./nginx/nginx-conf/docker-nginx.conf:/etc/nginx/nginx.conf
      - ./wwwroot:/wwwroot
      - ./.well-known:/wwwroot/.well-known

项目2的配置:

代码语言:javascript
复制
version: '3'

services:
  caddy:
    image: abiosoft/caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/Caddyfile
      - ./.caddy:/root/.caddy
      - ./wwwroot:/srv
      - ./logs:/opt/logs
    restart: always
    environment:
      - ACME_AGREE=true
      - TZ=Asia/Shanghai

一波操作

Docker Compose 文档 提到 Docker Compose 在不同配置文件的容器默认会用不同的 network,所以目标是让他们容器都绑定到同一个 network 上。

一番寻找发现了 network 和 external 配置,所以剩下要做的事情就是:

  1. 创建一个单独的网络(这里起名 frontend
代码语言:javascript
复制
sudo docker network create frontend
  1. 两个项目的 docker-compose.yml 文件的所有容器的网络都指定到刚创建的网络,并标记为 external

项目1:

代码语言:javascript
复制
version: "3.6"
services:
  nginx:
    image: nginx:latest
    build: ./nginx
    container_name: site-nginx
    restart: always
    ports:
      - 8080:80
      - 8443:443
    volumes:
      - ./logs:/var/log/nginx
      - ./nginx/nginx-conf/docker-nginx.conf:/etc/nginx/nginx.conf
      - ./wwwroot:/wwwroot
      - ./.well-known:/wwwroot/.well-known
    networks:
      - frontend

networks:
  frontend:
    external: true

项目2:

代码语言:javascript
复制
version: '3'

services:
  caddy:
    image: abiosoft/caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/Caddyfile
      - ./.caddy:/root/.caddy
      - ./wwwroot:/srv
      - ./logs:/opt/logs
    restart: always
    environment:
      - ACME_AGREE=true
      - TZ=Asia/Shanghai
    networks:
      - frontend

networks:
  frontend:
    external: true

3. 分别 docker-compose up -d 重建容器

4. Caddyfile 配置文件里面指定服务名即可访问容器(Docker 会自动将容器 IP 绑定到对应的 host,用这个 host 访问即可)

代码语言:javascript
复制
abcde.cn {
  gzip
  log /opt/logs/access.log
  tls example@gmail.com
  proxy / http://nginx
}

简单总结

  1. docker-compose 只是一个编排工具,相当于用配置文件描述了 docker 的命令何时执行
  2. docker-compose 在不指定 network 的配置下,会创建一个单独的 network 作为项目涉及到所有的容器的默认网络
  3. external: true 配置可以指定容器使用外部已有的网络

Docker 容器的网络的工作细节还待探索。

社区也发了一份:https://0xffff.one/d/1017

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 原配置
  • 一波操作
  • 简单总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档