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
答案 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中进行本地开发,并通过主机和容器间请求从我的容器访问容器。