Docker运行导致“上游未找到主机”错误

时间:2016-05-11 07:41:02

标签: nginx docker dockerfile

我在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。

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。有两件事在起作用。

一个是它在本地工作的方式,另一个是它在Docker Cloud中的工作方式。

本地工作流程

  • 进入Dockerfile所在的项目的根目录
  • 构建图片: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:

    • ' my-server-address.com:123.45.123.45'

优化提示

  • 忽略尽可能多的文件夹,以加快向docker deamon发送数据的过程
  • 添加.dockerignore文件
  • 通常您要添加node_modeluesbower_modulestmp
  • 等文件夹
  • 在我的情况下,tmp包含大约1.3GB的小文件,所以忽略它会大大加快这个过程