场景说明: 用 docker 启动了两个容器 nginx+php,两个容器 network 使用同一个 bridge; nginx 启动的时候暴露 80 端口给宿主机,同时设定 fastcgi 到 php:9000 的容器; 宿主机通过 host 绑定域名指向 nginx 容器;
问题: 宿主机通过域名访问可以正常访问,但是 php 代码中,需要使用域名 curl 去触发一部分逻辑(这个逻辑无法更改),由于容器中并没有 host,所以 curl 失败。现在有个问题,我是可以修改 hosts 来达到效果,但是容器一旦重启 ip 就改变,这并不能实现简单配置的方法,有什么方法可以解决我这个问题吗?
1
lowman 2019-07-20 10:51:44 +08:00
去其他社区问问吧, 这里似乎很难找到答案!!!
|
2
kyuuseiryuu 2019-07-20 11:27:06 +08:00 via iPhone
如果你期望未解析的域名指向的是你的某个容器的服务,那应该把它们都用 docker compose 编排在一起,代码里的一些 url 应该抽离出来到配置文件或环境变量,再通过 volume 或者 env 去配置。
如果指向的是公网服务,直接配宿主主机 hosts 应该可以的。 |
3
sleven 2019-08-30 18:14:19 +08:00
如果你是用 docker-compose.yml 编排的话,需要在被访问的 service 中的 networks 下配置 aliases,在 aliases 中添加域名,且与连接的 service 加入同一网络。
参考配置如下: ```yaml # ... nginx: image: "nginx-image" networks: mynet: aliases: - my-domain.com php: image: "php-image" networks: - mynet networks: mynet: ``` 经过上述配置后,即可在 php 容器内通过域名 my-domain.com 请求 nginx 容器。 如果是启动独立的两个容器之间通过域名访问的话,我猜大概是需要在被访问的容器启动的时候增加选项 `--network-alias my-domain.com` 并且两个容器同样也要加入同一网络。 |