【问题标题】:Docker compose extra_hosts does not change /etc/hosts fileDocker compose extra_hosts 不会更改 /etc/hosts 文件
【发布时间】:2020-05-26 08:57:45
【问题描述】:

我正在将 Nodejs 应用程序与 docker 一起部署在 AWS ecs 上。

问题是对私有 DNS 记录的 api 调用返回 error: getaddrinfo enotfound request

从研究来看,错误似乎与 DNS 查找有关(如果您有其他理论,请随时发表评论),所以我决定在 compose 上设置 DNS 服务器和 µextra_hostsµ。

即使一切都建立起来了,当我在 Dockerfile 中 cat /etc/hosts 时,它并没有改变。

问题是:

  1. 应该 /etc/hosts 由 extra_hosts 修改。
  2. 是否还有其他错误原因:getaddrinfo enotfound request?所有其他 api 调用都工作,除了内部 DNS 工作一次和之后返回错误:getaddrinfo enotfound.
  3. 使用 docker 配置 DNS 和主机的最佳方式是什么?
  4. 为什么它工作一次就停止了?

这就是我的 docker-compose 文件的外观:

version: '3'
services:
  nodejs:
    extra_hosts:
      - "<name here>:<ip here>"
      - "<name here>:<ip here>"
    dns:
      - <ip here>
      - <ip here>
      - <ip here>
    network_mode: 'host'
    build:
      context: .
      dockerfile: Dockerfile

这是 docker 文件的样子

FROM alpine:latest
RUN apk add --update nodejs nodejs-npm && apk add g++ make python
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .

RUN cat /etc/hosts
EXPOSE 80
CMD npm start

这是 docker build 输出

Sending build context to Docker daemon  11.58MB
Step 1/11 : FROM alpine:latest
 ---> f70734b6a266
Step 2/11 : RUN apk add --update nodejs nodejs-npm && apk add g++ make python
 ---> Using cache
 ---> b173538c6ce5
Step 3/11 : WORKDIR /usr/src/app
 ---> Using cache
 ---> 0186bcca617d
Step 7/11 : RUN npm install
 ---> Using cache
 ---> 546f707d5fea
Step 8/11 : COPY . .
 ---> b66f4bec9d93
Step 9/11 : RUN cat /etc/hosts
 ---> Running in 1c48f0426713
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  1c48f0426713
Removing intermediate container 1c48f0426713
 ---> 858735acc4a6
Step 10/11 : EXPOSE 80
 ---> Running in dd7a8ae0669a
Removing intermediate container dd7a8ae0669a
 ---> 907a3dafb4fc
Step 11/11 : CMD npm start
 ---> Running in a3dd69c6ec3b
Removing intermediate container a3dd69c6ec3b
 ---> cda2214b2761
Successfully built cda2214b2761
Successfully tagged test:latest

【问题讨论】:

  • 能否请您发布 Dockerfile 构建的输出
  • 小问题,为什么172.17.0.2 1c48f0426713 IP 带有容器id?它应该是额外主机的限定名称
  • 了解 docker-compose 和 Dockerfile 如何交互: 1. 构建镜像(通过 Dockerfile 或通过镜像) 2. 运行容器,添加来自 docker-compose 的所有信息。所以,是的,在构建时,您的/etc/hosts 没有尚未正确更改是有道理的。这还没有完全回答这个问题,但已经清楚了。
  • @β.εηοιτ.βε 你认为我应该在哪里寻找问题。 PS它只是部署错误,从本地mac一切正常。
  • 尝试直接管理/etc/hosts 通常不是一个好主意,Docker 或其他方式:不同上下文中的主机文件可能会不同步,并且您可能会处于工作神秘的状态一个系统上的原因,而不是另一个系统上的原因。在 AWS 上,您可以使用 Route 53 设置内部 DNS;调试您的实际 DNS 问题可能比尝试解决它更好。

标签: node.js docker docker-compose axios


【解决方案1】:

原来aws fargate只有一个网络,即awsvpc,它不允许修改主机文件或dns服务器规范。

值得一提的是,经过大量研究,我们没有尝试this suggestion

不确定它是否有效,但仍然......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2021-11-18
    相关资源
    最近更新 更多