V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wuxiaolin
V2EX  ›  Docker

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

  •  
  •   wuxiaolin · 2019-07-19 15:05:04 +08:00 · 4953 次点击
    这是一个创建于 1988 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    如果指向的是公网服务,直接配宿主主机 hosts 应该可以的。
    sleven
        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` 并且两个容器同样也要加入同一网络。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   985 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:59 · PVG 06:59 · LAX 14:59 · JFK 17:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.