在我的开发环境中,我想模拟一个“网络农场”部署,其中我有几个“物理”节点运行多个服务,它们属于同一个网络。
所以,假设我有 5 个节点,每个节点将托管 1 mysql
、 1nginx
和 2 个web
应用程序。并将mysql
绑定到同一个端口3306
,但在不同的 IP 地址上。
我开始写下docker-compose
配置并坚持第一步:Docker 拒绝在给定网络中创建新 ip 并将 mysql 绑定到该 ip 上的端口。
这就是我正在尝试使用的配置:
version: "3"
services:
node1_sql:
image: mariadb:10.0.33
restart: always
networks:
skkb:
ipv4_address: 10.9.2.2
ports:
- 10.9.2.2:3306:3306
environment:
- MYSQL_DATABASE=dbname
- MYSQL_ROOT_PASSWORD=password
volumes:
- ./sql_data/1:/var/lib/mysql
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
networks:
skkb:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.9.2.0/24
当我尝试这样做时docker-compose up
,出现以下错误:
Creating network "node-r_skkb" with driver "bridge"
Creating node-r_node1_sql_1 ... error
ERROR: for node-r_node1_sql_1 Cannot start service node1_sql: driver failed programming external connectivity on endpoint node-r_node1_sql_1 (24a8412b80ebc95f5b15f5d4ea5281639d6914f312f525cf8803ed5179b906a7): Error starting userland proxy: listen tcp 10.9.2.2:3306: bind: cannot assign requested address
ERROR: for node1_sql Cannot start service node1_sql: driver failed programming external connectivity on endpoint node-r_node1_sql_1 (24a8412b80ebc95f5b15f5d4ea5281639d6914f312f525cf8803ed5179b906a7): Error starting userland proxy: listen tcp 10.9.2.2:3306: bind: cannot assign requested address
ERROR: Encountered errors while bringing up the project.
如果我尝试绑定到10.9.2.1
,它没有问题。所以在我看来,它无法创建配置为的新 IP 地址ipv4_address: 10.9.2.2
任何想法如何解决这个问题?