我正在尝试为容器提供静态IP地址。我知道我必须创建一个自定义网络。我创建了它,网桥接口在主机上(Ubuntu 16.x)。容器从这个子网获得IP,但不是我提供的静态IP。
下面是我的docker-compose.yml:
version: '2'
services:
mysql:
container_name: mysql
image: mysql:latest
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3306:3306"
networks:
- vpcbr
apigw-tomcat:
container_name: apigw-tomcat
build: tomcat/.
ports:
- "8080:8080"
- "8009:8009"
networks:
- vpcbr
depends_on:
- mysql
networks:
vpcbr:
driver: bridge
ipam:
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
aux_addresses:
mysql: 10.5.0.5
apigw-tomcat: 10.5.0.6
容器获取10.5.0.2和10.5.0.3,而不是5和6。
5条答案
按热度按时间zpf6vheq1#
请注意,我不建议Docker中的容器使用固定IP,除非你正在做一些允许从容器网络外部路由到内部的事情(例如macvlan)。DNS已经在容器网络内部用于服务发现,并支持容器扩展。在容器网络外部,你应该使用主机上的暴露端口。有了这个免责声明,下面是你想要的合成文件:
bjp0bcyl2#
我遇到了一些困难,环境变量是自定义名称(不与容器名称/端口约定KAPACITOR_BASE_URL和KAPACITOR_ALERTS_ENDPOINT)。如果我们在这种情况下给予服务名称,它不会将ip解析为
在上面的
http://[**kapacitor**]:9092
不会解析为http://172.20.0.2:9092
我使用子网划分配置解决了静态IP问题。
hc8w905p3#
如果您从未看到静态IP地址集,可能是因为您正在使用“docker compose up”。请尝试使用“docker-compose up”。
当我使用“docker-compose up”(带连字符)时,我现在看到分配的静态IP。
我浪费了很多时间来弄清楚这一点
aydmsdu94#
我意识到,更方便和有意义的方法是给予容器一个container-name。你可以在同一个docker网络中使用这个名字作为源。这对我很有帮助,因为docker-containers有不断变化的IP,通过这个我可以与另一个容器通信,我可以在配置文件中使用静态名称。
ndh0cuux5#
Docker中的静态IP地址非常有用,特别是在与反向代理服务器一起使用时。经验法则是第一个Docker组合文件(容器)定义未来容器使用的网络子网。
一个简单的用例是使用代理管理器,该代理管理器除了向容器分配SSL证书外,还将流量定向到容器。来源:Docker Compose for Static/fixed IP