繁体   English   中英

多个CMD在docker-compose中运行但是没有在容器上生效

[英]Multiple CMD ran in docker-compose but did not take effect on the container

我有一个构建GoBGP 扬声器图像的 dokefile。

这是 dockerfile

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y \
        wget \
        iputils-ping \
        traceroute \
        tcpdump \
        iproute2 \
        && rm -rf /var/lib/apt/lists/*

RUN wget https://github.com/osrg/gobgp/releases/download/v1.25/gobgp_1.25_linux_amd64.tar.gz && \
    tar zxvf gobgp_1.25_linux_amd64.tar.gz && \
    mv gobgp* /usr/bin/

RUN mkdir -p /opt/gobgp
WORKDIR /opt/gobgp/

COPY docker/gobgp/configs/* ./configs/

CMD ["gobgpd"]
EXPOSE 50051

我还有一个 docker-compose,它将带来整个 gobgp.network 拓扑。 我正在尝试在gobgp_1服务上执行多个命令:

gobgp_1:
    build:
      context: ./
      dockerfile: ./docker/gobgp/Dockerfile
    command: sh -c "gobgpd -f configs/gobgpd_1.conf ; gobgp global rib add -a ipv4 11.8.0.0/24
               ; gobgp global rib add -a ipv4 11.7.0.0/24
               ; gobgp global rib add -a ipv4 11.6.0.0/24
               ; gobgp global rib add -a ipv4 11.5.0.0/24
               "
    privileged: true
    networks:
      net5:
        ipv4_address: 11.8.0.2
      net6:
        ipv4_address: 11.7.0.2
      net7:
        ipv4_address: 11.6.0.3
      net8:
        ipv4_address: 11.5.0.3

gobgpd -f configs/gobgpd_1.conf命令运行成功,但是命令运行的rest,但是没有对gobgpd应用生效。 如果我通过跳转到容器 bash 手动运行命令,命令会成功运行,并且我会在gobgpd应用程序上看到更改。

为您提供一些我期望的上下文 当我使用以下命令时应该看到一些信息: gobgp global rib但是在启动 docker-compose 后我什么也看不到。 否则,如果我手动运行 当我运行命令时,我会看到预期的信息。

这是我的整个 docker-compose 文件。

version: '3'

services:
  isp_1:
    build:
      context: ./
      dockerfile: ./docker/gobgp/Dockerfile
    command: "gobgpd -f configs/isp_1.conf"
    privileged: true
    networks:
      net1:
        ipv4_address: 9.0.0.3
  isp_2:
    build:
      context: ./
      dockerfile: ./docker/gobgp/Dockerfile
    command: "gobgpd -f configs/isp_2.conf"
    privileged: true
    networks:
      net2:
        ipv4_address: 8.0.0.3
  gobgp_5:
    build:
      context: ./
      dockerfile: ./docker/gobgp/Dockerfile
    command: "gobgpd -f configs/gobgpd_5.conf"
    privileged: true
    networks:
      net2:
        ipv4_address: 8.0.0.2
      net4:
        ipv4_address: 11.10.0.3
  gobgp_4:
    build:
      context: ./
      dockerfile: ./docker/gobgp/Dockerfile
    command: "gobgpd -f configs/gobgpd_4.conf"
    privileged: true
    networks:
      net1:
        ipv4_address: 9.0.0.2
      net3:
        ipv4_address: 11.0.0.3
  gobgp_3:
    build:
      context: ./
      dockerfile: ./docker/gobgp/Dockerfile
    command: "gobgpd -f configs/gobgpd_3.conf"
    privileged: true
    networks:
      net4:
        ipv4_address: 11.10.0.2
      net6:
        ipv4_address: 11.7.0.3
  gobgp_2:
    build:
      context: ./
      dockerfile: ./docker/gobgp/Dockerfile
    command: "gobgpd -f configs/gobgpd_2.conf"
    privileged: true
    networks:
      net3:
        ipv4_address: 11.0.0.2
      net5:
        ipv4_address: 11.8.0.3
  gobgp_1:
    build:
      context: ./
      dockerfile: ./docker/gobgp/Dockerfile
    command: sh -c "gobgpd -f configs/gobgpd_1.conf ; gobgp global rib add -a ipv4 11.8.0.0/24
               ; gobgp global rib add -a ipv4 11.7.0.0/24
               ; gobgp global rib add -a ipv4 11.6.0.0/24
               ; gobgp global rib add -a ipv4 11.5.0.0/24
               "
    privileged: true
    networks:
      net5:
        ipv4_address: 11.8.0.2
      net6:
        ipv4_address: 11.7.0.2
      net7:
        ipv4_address: 11.6.0.3
      net8:
        ipv4_address: 11.5.0.3
  server_1:
    build:
      context: ./
      dockerfile: ./docker/gobgp/Dockerfile
    privileged: true
    networks:
      net7:
        ipv4_address: 11.6.0.2
  controller_1:
    build:
      context: ./
      dockerfile: ./docker/gobgp/Dockerfile
    privileged: true
    networks:
      net8:
        ipv4_address: 11.5.0.2
networks:
  net1:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 9.0.0.0/24
  net2:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 8.0.0.0/24
  net3:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 11.0.0.0/24
  net4:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 11.10.0.0/24
  net5:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 11.8.0.0/24
  net6:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 11.7.0.0/24
  net7:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 11.6.0.0/24
  net8:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 11.5.0.0/24

GoBGP 只是一个 bgp 守护进程,本身不包含任何修改路由表的功能osrg/gobgp#1493

如果你喜欢使用 GoBGP 作为软件路由器的一个组件并进行数据包转发,你需要实现它有两个选项可以使用 GoBGP 实现 FIB 操作使用内置的 zebra 集成使用 gRPC 编写你自己的代码 API

使用斑马的例子

[global.config]
  as = 2
  router-id = "172.17.0.3"

[zebra]
    [zebra.config]
        enabled = true
        url = "unix:/var/run/quagga/zserv.api"
        redistribute-route-type-list = ["connect"]
        version = 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM