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

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

作者头像
zgq354
发布于 2021-06-02 02:05:36
发布于 2021-06-02 02:05:36
11.4K00
代码可运行
举报
文章被收录于专栏:0x00010x0001
运行总次数:0
代码可运行

背景

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

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

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

原配置

项目1的配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
sudo docker network create frontend
  1. 两个项目的 docker-compose.yml 文件的所有容器的网络都指定到刚创建的网络,并标记为 external

项目1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
只了解View的事件分发是不够的,来看下输入系统对事件的处理
在上一篇文章中,我们学习了IMS的诞生(创建),IMS创建后还会进行启动,这篇文章我们来学习IMS的启动过程和输入事件的处理。
用户1269200
2018/12/18
7520
只了解View的事件分发是不够的,来看下输入系统对事件的处理
Android输入系统的事件传递流程和IMS的诞生
很多同学可能会认为输入系统是不是和View的事件分发有些关联,确实是有些关联,只不过View事件分发只能算是输入系统事件传递的一部分。这个系列讲的输入系统主要是我们不常接触的,但还是需要去了解的那部分。
用户1269200
2018/12/05
1.9K0
Android输入系统的事件传递流程和IMS的诞生
[Android][Framework] 无障碍快捷方式相关代码
问题:无障碍快捷方式(Accessibility Shortcut)打开不生效。
wOw
2018/09/18
2K0
[Android][Framework] 无障碍快捷方式相关代码
Android GPS学习 (一) :GPS 启动流程
packages/apps/Settings/src/com/android/settings/location/LocationSwitchBarController.java
用户7557625
2020/07/15
2.5K0
Android9.0 蓝牙开启流程
/packages/apps/Settings/src/com/android/settings/bluetooth/BluetoothSwitchPreferenceController.java
用户7557625
2020/07/15
2.2K0
Android IME输入法启动&显示&隐藏流程梳理以及常见问题&调试技巧小结
主要指输入法框架的InputMethodManager, 每个app都一个实例, 用来和输入法控制端交互。运行在需要使用输入法的进程
wizzie
2023/05/12
9.8K1
Android IME输入法启动&显示&隐藏流程梳理以及常见问题&调试技巧小结
Android框架简介--启动过程--大体流程
Android设备的启动必须经历3个阶段,即Boot Loader,Linux Kernel和Android系统服务。严格来讲Android系统实际上是运行于Linux 内核上的一系列用户进程,并不算一个严格意义上的操作系统。一般面试问及启动流程都是从init进程开始
小蚂蚁与大象
2022/04/02
8700
Android框架简介--启动过程--大体流程
Android UsageStatsService(应用使用统计服务)的学习与调研
一. 简介 UsageStatsService是一个系统服务,其主要通过AMS等,来监测并记录各个应用的使用数据,如上次调用com.android.settings的时间等。 UsageStatsSe
宋凯伦
2018/01/04
3.1K0
Android系统启动流程(三)解析SyetemServer进程启动过程
前言 上一篇我们学习了Zygote进程,并且知道Zygote进程启动了SyetemServer进程,那么这一篇我们就来学习Android7.0版本的SyetemServer进程的启动过程。 1.Zygote启动SyetemServer进程 在上一篇文章中我们讲到在ZygoteInit.java的startSystemServer函数中启动了SyetemServer进程,如下所示。 frameworks/base/core/java/com/android/internal/os/ZygoteInit.jav
用户1269200
2018/02/01
1.3K0
Android系统启动流程(三)解析SyetemServer进程启动过程
WifiDisplay开启流程
我们先来看一下WifiDisplay的代码,先从UI看起。 WifiDisplay是在Wifi P2P的基础上发展而来的,他的功能实现也离不开P2P。所以在WifiDisplaySettings的onCreate中,就先初始化了WifiP2P。 /packages/apps/Settings/src/com/android/settings/wfd/WifiDisplaySettings.java
用户7557625
2020/07/15
1.9K0
按下电源键后竟然发生了这一幕 —— Android 系统启动流程分析
作为一名 Android 程序员,你有没有想过:那么复杂的 Android 系统,它是怎样运行起来的,我们的 App 又是怎样被 Android 系统加载后呈现在屏幕上的呢?Android 系统的启动是一个比较复杂的过程,涉及到了一些我们没有接触过的知识,本文基于 Android Nougat 最新的代码上讲述 Android 系统的启动流程。
程序亦非猿
2019/08/16
8310
按下电源键后竟然发生了这一幕 —— Android 系统启动流程分析
Android 11 WiFi开启流程
从刚接触WiFi时跟过wifi的开启流程,当时还是android9。到了Android11代码架构有了不小的改动,在这里重新梳理一遍,便于在工作中更快速的跟踪代码。
用户7557625
2021/07/19
5.3K0
【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 )
【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 )
韩曙亮
2023/03/29
1.2K0
【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 )
Android中Input事件初始化、接收以及分发
至此 , InputManager完成初始化. 接下来就等待/dev/input中添加设备文件.
None_Ling
2020/09/24
2.1K0
Android 当点击飞行模式都发生了什么?
今天中午午休时,我把手机开飞行模式了,能看到 WiFi 、蜂窝数据和蓝牙都关闭了,心想,这时候还能收到短信吗?顺着好奇心,我们不妨来研究一下源码,看看点击飞行模式都发生了什么?
吴小龙同學
2019/12/11
1.7K0
Android | 输入系统(IMS)
一般情况下很多同学对于点击事件的认识都只存在于从 Activity 开始的,然后从 Window 中进行分发,甚至有些人可能也只知道 onTouchEvent 和 dispatchTouchEvetn 这几个方法,对于 View 层的了解都不属性。
345
2023/03/08
1.6K0
Android | 输入系统(IMS)
Android9.0Wifi热点开启流程梳理
Android9.0中对热点做了较大改动,将热点很大程度从Wifi中剥离出来了。 下面我们看一下热点是怎么开启的。
用户7557625
2020/07/15
4.6K0
Android DropBox模块笔记
frameworks/base/services/java/com/android/server/SystemServer.java - 函数run() —–> 调用函数startOtherServices() —–> 调用类SystemServiceManager的函数startService(),注册到SystemService列表
wizzie
2022/11/21
3.2K0
Android DropBox模块笔记
Android Framework学习(三)之SyetemServer进程启动解析
从上篇博客中,我们知道了Zygote进程启动了SyetemServer进程,本篇博客我们就一起来学习SyetemServer进程。
老马的编程之旅
2022/06/22
4290
Android系统启动之SystemServer
SystemServer是由Zygote启动的. 源码路径frameworks/base/services/java/com/android/server/SystemServer.java
李小白是一只喵
2020/04/23
2.4K0
Android系统启动之SystemServer
推荐阅读
相关推荐
只了解View的事件分发是不够的,来看下输入系统对事件的处理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档