我在Docker中托管了一个仅限前端的Web应用程序。后端已经存在,但它有“自定义IP”地址,所以我不得不更新我的本地/ etc / hosts文件来访问它。因此,从我的本地机器,我可以毫无问题地访问后端API。
但问题是Docker不知何故无法解析这个“自定义IP”,即使主机在容器中写入(image?)/ etc / hosts文件。
当Docker容器启动时,我看到了这个错误
$ docker run media-saturn:dev
2016/05/11 07:26:46 [emerg] 1#1: host not found in upstream "my-server-address.com" in /etc/nginx/sites/ms.dev.my-company.com:36
nginx: [emerg] host not found in upstream "my-server-address.com" in /etc/nginx/sites/ms.dev.my-company.com:36
我通过Dockerfile中的命令更新/ etc / hosts文件,就像这样
# install wget
RUN apt-get update \
&& apt-get install -y wget \
&& rm -rf /var/lib/apt/lists/*
# The trick is to add the hostname on the same line as you use it, otherwise the hosts file will get reset, since every RUN command starts a new intermediate container
# it has to be https otherwise authentification is required
RUN echo "123.45.123.45 my-server-address.com" >> /etc/hosts && wget https://my-server-address.com
当我进入机器检查/ etc / hosts的当前内容时,确实存在“123.45.123.45 my-server-address.com”这一行。
任何人都可以帮我解决这个问题吗?我是Docker newbee。
答案 0 :(得分:1)
我已经解决了这个问题。有两件事在起作用。
一个是它在本地工作的方式,另一个是它在Docker Cloud中的工作方式。
本地工作流程
docker build -t media-saturn:dev .
docker run -it --add-host="my-server-address.com:123.45.123.45" -p 80:80 media-saturn:dev
Docker云工作流程
extra_host
指令添加到堆栈文件中,如此然后单击Docker云中的重新部署,以使更改生效
extra_hosts:
优化提示
node_modelues
,bower_modules
和tmp
tmp
包含大约1.3GB的小文件,所以忽略它会大大加快这个过程