本地 Macos 开发,本地 ubuntu22.04 部署,本地 docker 镜像封装成两个镜像,一个是 mysql 数据库,一个是 web 端,本地测试运行正常后,通过 Kamal 的 kamal setup 指令部署到 ubuntu,提示数据库域名无法解析,请问这样的运行环境,确保 docker 间正常通讯,网络配置有什么要求吗?
用 IP。
配置 docker 分配的内部 ip 还是实体机可直达的 ip,例如同网段 ip
宿主机 ip, 需要 db 容器映射端口
看错了问题 没用过 kamal, 不过不用虚拟网络的话,两台 docker 互通我一般是通过宿主机地址加映射端口实现
https://ruby-china.org/topics/43396 参见下我这个帖子里的回复 本质问题是 连 docker 里的数据库问题
Host IP。kamal 没有用 docker 的虚拟子网(无法跨主机)。
手动创建一个 bridge 网络
docker network create -d bridge mynetwork
所有容器使用这个网络
container: env: secret: - GODADDY_API_KEY - GODADDY_API_SECRET options: network: mynetwork
使用 container name 去连接
POSTGRES_HOST=xxx_app-postgres
其实这也是我费解的地方 在我的想象当中 kamal 是用在多台机器上的部署
但是感觉连数据库都是直接通过公网 ip 连,而不是通过内网 ip
可以通过内网 ip 啊,把虚拟机放在 VPC 里。
你如果指 docker 的 service,那是 docker 自己维护的虚拟内网。如果跨主机用 docker 的网络,就等于要用 docker swarm 了。
deploy.yml 中按照下面配置 servers,database_url 就可以直接通过本地 ip 访问到了。
servers: web: hosts: - 8.8.8.8 # 改成你自己的ip options: add-host: host.docker.internal:host-gateway