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

时间:2018-11-06 22:37:58

标签: docker docker-compose traefik dnsmasq

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

我使用Traefik进行了docker-compose设置,需要从docker网络/容器内部以及外部访问几种服务。

在linux机器上(通过Let'sEncrypt和http重定向到https),一切都使用相同的FQDN进行Docker容器内部和外部访问,而我不必使用服务名称。

当我使用docker-compose exec belapi / bin / bash从管道容器内部运行Command "c:\users\[Censured]\appdata\local\programs\python\python37-32\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\[Censured]\\AppData\\Local\\Temp\\pip-install-c9sttv8x\\twisted\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\[Censured]\AppData\Local\Temp\pip-record-7opo58sr\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\[Censured]\AppData\Local\Temp\pip-install-c9sttv8x\twisted\ 时,出现以下错误(并且在Traefik访问日志中未显示该错误):

curl http://belapi.dev.biodati.test

这很好(使用服务名):

api@407cf7105aee:/app$ curl http://belapi.dev.biodati.test/status
curl: (7) Failed to connect to belapi.dev.biodati.test port 80: Connection refused

我还可以在docker容器外部的Mac上的bash shell中运行以下命令(并且我看到它击中了Traefik访问日志):

curl http://belapi:8000/status

我有dnsmasq设置,可以将所有* .test域转发到127.0.0.1。

从管道容器内部:

curl http://belapi.dev.biodati.test/status

我的docker-compose文件:

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

1 个答案:

答案 0 :(得分:1)

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

基本上-DNSMasq运行良好,Mac Docker Desktop DNS映射运行良好。我可以查询我的服务域名(例如service1.test)dig service1.test1,然后返回127.0.0.1,这正是我在DNSMasq中设置的。因此,我的域名为我的主机返回了正确的IP地址。除了-我是在容器中放入它的-所以127.0.0.1是指我的容器环境。

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

sudo ifconfig lo0 alias 10.254.254.254

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

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