Docker compose无法启动已在使用的服务地址?

标签 docker docker-compose gogs

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

ERROR: for f1d322793d47_docker_gogs_1 Cannot start service gogs: Address already in use.



我已经检查以确保没有使用 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

最佳答案

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

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

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

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

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

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

在 docker compose version 2 中有一个 config 来更改网关和广播 ip。

对于版本 3,目前似乎不支持 config

关于Docker compose无法启动已在使用的服务地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51489758/

相关文章:

git - 使用docker-compose安装Gogs

docker - gitlab CI + Docker + .NET Core,我不明白为什么只安装较旧的.net版本

docker - 在kubernetes集群上部署zuul代理

docker-compose:为绑定(bind)挂载和托管挂载定义挂载

Mongodb Docker - 创建初始用户并设置初始结构

docker - 我们可以在 docker 中挂载命名卷的子目录吗?

c# - 持久化 mcr.microsoft.com/mssql/server :2019-latest using Docker volumes 的容器时权限被拒绝

git - 如何配置 gogs 以快速加载大型 git 存储库?

docker-compose - Gogs + 无人机 getsockopt : connection refused

r - 使用Dockerfile进行Dockerizing Shiny-app