docker - 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
解决方案
在网络中,通常为特定任务保留三个 IP。
0 用作网络地址。1 用作网关地址,255 用作广播地址。
如果一个容器想与同一网络中的另一个容器通信,他可以直接与他交谈。当他想与网络外的其他 IP 通信时,他会将请求发送到网关地址,并希望网关知道如何路由。
要查看这一点,您可以检查 docker 容器并检查 IPAddress 附近的网关属性。
或者使用 ifconfig (Linux) 并搜索与您创建的 id 相同的网络。该网络的 IP 为 203.0.113.1
所以你的IP已经被网关使用了。
在 docker compose 版本 2 中有一个配置来更改网关和广播 ip。
对于版本 3,当前似乎不支持该配置。
推荐阅读
- php - 为什么我的代码返回多个回显字符串
- sql-server - 将 CSV 导入 SQL Server - 截断
- azure - 带有变量 source_address_prefix 的 azurerm_network_security_rule
- r - 按周对数据框进行分组,并在 R 中添加一个计算该周的方差/平均值的列
- solr - TYPO3 SolrConnection 删除了搜索,现在怎么办?
- python - Python - 单向 websocket
- javascript - 通过 vanilla javascript 从 ncbi 获取 fasta
- java - 如何在 JAVA 中为具有泛型类型的可选项提供默认值
- java - 如何编写使用匿名内部类(如 PreparedStatementSetter)的类的 JUnit 测试?
- postgresql - 为什么 SELECT COUNT(DISTINCT) 中不使用索引?