【问题标题】:Network IP address for docker composedocker compose 的网络 IP 地址
【发布时间】:2021-04-17 19:51:14
【问题描述】:

tl;dr 我希望此堆栈中的每个容器都使用相同的 IP 和 MAC 地址并位于我的本地网络上,但需要有关如何操作的帮助

对于初学者来说,我是 docker 和 docker-compose 的新手。我为我的 Plex 服务器制作了一个 docker-stack(其中三个,一个用于按一般类别/电视节目、音乐和假期分类的电影),每个服务器在我的本地网络上都有自己的 IP 地址和 MAC,现在我想为我的一些媒体管理工具制作第二个堆栈,但这次我希望整个堆栈使用一个 IP 地址和 MAC 地址,但我无法弄清楚如何正确执行/所以它可以工作 这是在 QNAP NAS (TVS1282v3/QTS) 上运行的,但我正在通过 CLI 工作,因为我认为如果我通过容器站执行 docker-compose,它不会为我创建网络

version: '2.4'

services:
  Sonarr:
    image: linuxserver/sonarr
    container_name: Sonarr
    environment:
      - TZ=AMERICA/Denver
      - name= Sonarr
    volumes:
      - /share/MediaManagement/Sonarr/config:/config:rw
      - /share/MediaManagement/rip:/rip:rw
      - /share/Plex:/Plex:rw
    ports:
      - 8989:8989
    restart: unless-stopped

  Radarr:
    image: linuxserver/radarr
    container_name: Radarr
    environment:
      - TZ=AMERICA/Denver
      - name= Radarr
    volumes:
      - /share/MediaManagement/Radarr/config:/config:rw
      - /share/MediaManagement/rip:/rip:rw
      - /share/Plex:/Plex:rw
    ports:
      - 7878:7878
    restart: unless-stopped

  Lidarr:
    image: linuxserver/lidarr
    container_name: Lidarr
    hostname: Lidarr
    environment:
      - TZ=AMERICA/Denver
      - name= Lidarr
    volumes:
      - /share/MediaManagement/Lidarr/config:/config:rw
      - /share/MediaManagement/rip:/rip:rw
      - /share/Plex:/Plex:rw
    ports:
      - 8686:8686
    restart: unless-stopped

  networks:
    qnet-static:
      ipv4_address: 192.168.2.100
    mac_address: 05:4A:AA:08:51:43
    
networks:
  qnet-static:
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: "eth0"
      config:
        - subnet: 192.168.2.0/23
          gateway: 192.168.2.1

我也尝试过,就像它在我放置的 Plex 撰写文件中的设置方式一样

services:
  NameOfService:
    mac_address: 05:4A:AA:08:51:43
    networks:
      qnet-static:
        ipv4_address: 192.168.2.100
....
networks: ##At the end, not in each service##
  qnet-static:
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: "eth0"
      config:
        - subnet: 192.168.2.0/23
          gateway: 192.168.2.1

在每个服务中,但只有第一个容器工作......

我也试过这个,但还是不行/语法错误

networks:
  qnet-static:
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: "eth0"
      config:
        - subnet: 192.168.2.0/23
          gateway: 192.168.2.250
    ipv4_address: 192.168.2.100
  mac_address: 05:4A:AA:08:51:43

任何帮助将不胜感激,因为我可能只是缺少一个小片段

【问题讨论】:

    标签: docker docker-compose docker-networking docker-stack qnap


    【解决方案1】:

    彻底删除文件中的所有networks: 设置。不要尝试手动为容器分配 IP 地址或配置它们的 MAC 地址。

    您的容器可以通过主机的 IP 地址访问,每个容器使用第一个 ports: 编号。就您网络上的其他主机而言,容器中的进程将无法与不在容器中运行的其他服务区分开来。

    在大多数情况下,您也不需要手动设置container_name:hostname:。在 Docker 文档中的 Networking in Compose 中有关于 Compose 网络环境的其他详细信息,尽管这主要集中在容器之间的连接上。您通常不需要考虑容器专用 IP 地址或(尤其是)容器网络环境中的人工 MAC 地址。

    【讨论】:

    • 感谢您的回复,大卫!我希望能够将堆栈设置为手动 IP,因为我有时会在分配的端口上运行另一个服务(我知道我可以更改分配给的端口)而且我知道我不必分配了一个 MAC,但我希望整个堆栈使用分配的 IP/MAC,因为有时我想启动第二个相同图像的容器进行测试。这部分是为了我自己的个人知识来学习我可以用 docker 做的不同事情。如果我的要求是不可能的,请告诉我,但我很想知道如果可能的话!
    • 通常唯一的冲突是在ports:附近(假设你没有手动指定container_name:之类的东西);手动设置容器 IP 地址不会影响主机端口冲突。如果主机有多个 NIC 或 IP 别名,您可以设置 ports: 以绑定到特定主机 IP。但这样一来,容器的行为更像是一个进程,它(外部)通常没有自己的 IP 地址。
    猜你喜欢
    • 2022-11-28
    • 2019-02-03
    • 1970-01-01
    • 2021-05-31
    • 2020-09-01
    • 2018-09-01
    • 2011-07-07
    • 2020-05-23
    • 2020-08-09
    相关资源
    最近更新 更多