容器中如何访问未解析域名

2019-07-19 15:05:04 +08:00
 wuxiaolin

场景说明: 用 docker 启动了两个容器 nginx+php,两个容器 network 使用同一个 bridge; nginx 启动的时候暴露 80 端口给宿主机,同时设定 fastcgi 到 php:9000 的容器; 宿主机通过 host 绑定域名指向 nginx 容器;

问题: 宿主机通过域名访问可以正常访问,但是 php 代码中,需要使用域名 curl 去触发一部分逻辑(这个逻辑无法更改),由于容器中并没有 host,所以 curl 失败。现在有个问题,我是可以修改 hosts 来达到效果,但是容器一旦重启 ip 就改变,这并不能实现简单配置的方法,有什么方法可以解决我这个问题吗?

4853 次点击
所在节点    Docker
3 条回复
lowman
2019-07-20 10:51:44 +08:00
去其他社区问问吧, 这里似乎很难找到答案!!!
kyuuseiryuu
2019-07-20 11:27:06 +08:00
如果你期望未解析的域名指向的是你的某个容器的服务,那应该把它们都用 docker compose 编排在一起,代码里的一些 url 应该抽离出来到配置文件或环境变量,再通过 volume 或者 env 去配置。

如果指向的是公网服务,直接配宿主主机 hosts 应该可以的。
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` 并且两个容器同样也要加入同一网络。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/584429

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX