首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Traefik的Docker容器内部与外部dns解析问题

使用Traefik的Docker容器内部与外部dns解析问题
EN

Stack Overflow用户
提问于 2018-11-06 22:37:57
回答 1查看 3.5K关注 0票数 3

Docker 18.06.1-ce,traefik 1.7.3,dnsmasq,Mac 10.14

我有与Traefik的对接-组合设置,需要从码头网络/容器内部和外部访问几个服务。

在linux机器上(让‘sEncrypt和http重定向到https),所有东西都使用相同的FQDN进行内部和外部访问,我不需要使用服务名称。

当我在管道容器中使用docker-组合exec /bin/bash运行curl http://belapi.dev.biodati.test时,我会得到以下错误(而且我没有看到它出现在Traefik访问日志中):

代码语言:javascript
复制
api@407cf7105aee:/app$ curl http://belapi.dev.biodati.test/status
curl: (7) Failed to connect to belapi.dev.biodati.test port 80: Connection refused

这很好(使用servicename):

代码语言:javascript
复制
curl http://belapi:8000/status

我还可以在我的Mac外部的坞容器外运行bash shell (我看到它击中了Traefik访问日志):

代码语言:javascript
复制
curl http://belapi.dev.biodati.test/status

我已经设置dnsmasq将所有*.test域转发到127.0.0.1。

从管道容器内部:

代码语言:javascript
复制
dig belapi.dev.biodati.test

;; QUESTION SECTION:
;belapi.dev.biodati.test.   IN  A

;; ANSWER SECTION:
belapi.dev.biodati.test. 7  IN  A   127.0.0.1

我的船坞-撰写文件:

代码语言:javascript
复制
networks:
  biodati:
    external: true

services:

  pipeline:
    container_name: pipeline
    image: biodati/bel_pipeline:dev
    networks:
      biodati:

  traefik:
    image: traefik:1.7
    container_name: traefik
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./conf/traefik.toml:/traefik.toml
      - ./logs:/logs
    networks:
      biodati:
    labels:
      - traefik.enable=true
      - traefik.backend=traefik
      - traefik.frontend.rule=Host:traefik.${BS_HOST_NAME:?err}
      - traefik.port=8080
      - traefik.docker.network=biodati

  # BEL API - core requirement
  belapi:
    container_name: belapi
    image: belbio/bel_api:localdev
    networks:
      biodati:
    labels:
      - traefik.enable=true
      - traefik.backend=belapi
      - traefik.frontend.rule=Host:belapi.${BS_HOST_NAME:?err};
      - traefik.port=8000
      - traefik.docker.network=biodati
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-27 15:52:57

有关如何解决此问题的详细信息:https://medium.com/@williamhayes/local-dev-on-docker-fun-with-dns-85ca7d701f0a

基本上-- DNSMasq工作得很好,映射工作得很好。我可以查询我的服务域名(例如service1.test) dig service1.test1并得到127.0.0.1,这正是我在DNSMasq中设置的。所以我的域名是为我的主机返回正确的IP地址。除了-我把这个放在我的容器里所以127.0.0.1指的是我的容器环境。

在终端的Mac主机级别上运行以下命令:

代码语言:javascript
复制
sudo ifconfig lo0 alias 10.254.254.254

为127.0.0.1添加了一个别名,我可以在DNSMasq中使用这个别名,而不是127.0.0.1,它仍然可以映射到我的本地主机,但它也适用于从我的码头容器进行路由。

现在,我可以在我的Mac上使用本地域在Docker中进行本地开发,并从我的主机并通过容器间请求访问我的容器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53181154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档