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

Dav*_*bec 5 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
Run Code Online (Sandbox Code Playgroud)

我在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 
Run Code Online (Sandbox Code Playgroud)

当我进入机器检查/ etc/hosts的当前内容时,确实存在"123.45.123.45 my-server-address.com"这一行.

任何人都可以帮我解决这个问题吗?我是Docker newbee.

Dav*_*bec 1

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

一是它在本地如何工作,另一个是它在 Docker Cloud 中如何工作。

本地工作流程

  • cd 进入项目根目录,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云中点击Redeploy,使更改生效

    额外主机:

    • '我的服务器地址.com:123.45.123.45'

优化提示

  • 忽略尽可能多的文件夹以加快向 docker deamon 发送数据的过程
  • 添加 .dockerignore 文件
  • 通常您想要添加文件夹,例如node_modelues,bower_modules和tmp
  • 就我而言,其中tmp包含约 1.3GB 的小文件,因此忽略它会显着加快该过程