首页 > 解决方案 > Docker compose 无法启动已在使用的服务地址?

问题描述

出于某种原因docker-compose,不喜欢203.0.113.1以下配置中 gogs 容器的地址。请注意,在下面的示例中,我运行了 Gogs 203.0.113.3,但如果我将其更改203.0.113.1为消息:

错误:对于 f1d322793d47_docker_gogs_1 无法启动服务 gogs:地址已在使用中。

我已经检查以确保没有使用该 IP 地址的容器203.0.113.1正在运行,所以我很好奇是否docker-compose出于某种原因一般不允许该地址?

    version: '3'
    services:
      gogs-nginx:
        build: ./nginx
        ports:
        - "80:80"
        networks:
          mk1net:
            ipv4_address: 203.0.113.2
      gogs:
        image: gogs/gogs
        ports:
        - "3000:3000"
        volumes: 
          - gogs-data:/data
        depends_on:
          - gogs-nginx
        networks: 
          mk1net:
            ipv4_address: 203.0.113.3
    volumes:
      gogs-data:
         external: true
    networks:
      mk1net:
        ipam:
          config:
            - subnet: 203.0.113.0/24

标签: dockerdocker-composegogs

解决方案


在网络中,通常为特定任务保留三个 IP。

0 用作网络地址。1 用作网关地址,255 用作广播地址。

如果一个容器想与同一网络中的另一个容器通信,他可以直接与他交谈。当他想与网络外的其他 IP 通信时,他会将请求发送到网关地址,并希望网关知道如何路由。

要查看这一点,您可以检查 docker 容器并检查 IPAddress 附近的网关属性。

或者使用 ifconfig (Linux) 并搜索与您创建的 id 相同的网络。该网络的 IP 为 203.0.113.1

所以你的IP已经被网关使用了。

在 docker compose 版本 2 中有一个配置来更改网关和广播 ip。

对于版本 3,当前似乎不支持该配置。


推荐阅读