为什么使用 awsvpc 网络模式的 ECS 容器不能在 CloudFormation 中声明 extraHosts?
Why can't ECS containers using `awsvpc` network mode declare `extraHosts` in CloudFormation?
我希望能够使用 extraHosts
指令在 CloudFormation 中为我的 docker 容器声明额外的主机。不幸的是,因为我使用的是 Fargate,所以这是不可能的,因为 Fargate 总是使用 awsvpc
网络模式。
为什么在 awsvpc
模式下无法在容器的主机文件中声明额外条目?不就是一个简单的额外调用也--add-host
在幕后吗?
AWSVPC 模式是一种自定义模型,不使用基于标准容器的 docker 标志。换句话说,它们需要在“任务”级别重新实现(可用于任务内的所有容器),而我们根本没有实现这个标志(以及 searchDomains
等其他标志)。
在我的一个副项目中,我通过使用读取变量并配置容器本身的脚本启动容器来解决这个问题。文件是here,我是copy/pasting 为了方便起见:
#!/bin/bash
# when the variable is populated a search domain entry is added to resolv.conf at startup
# this is needed for the ECS service discovery given the app works by calling host names and not FQDNs
# a search domain can't be added to the container when using the awsvpc mode
# and the awsvpc mode is needed for A records (bridge only supports SRV records)
if [ $SEARCH_DOMAIN ]; then echo "search ${SEARCH_DOMAIN}" >> /etc/resolv.conf; fi
ruby /app/yelb-appserver.rb -o 0.0.0.0)
此 GH issue 中还有关于该主题的其他讨论。
我希望能够使用 extraHosts
指令在 CloudFormation 中为我的 docker 容器声明额外的主机。不幸的是,因为我使用的是 Fargate,所以这是不可能的,因为 Fargate 总是使用 awsvpc
网络模式。
为什么在 awsvpc
模式下无法在容器的主机文件中声明额外条目?不就是一个简单的额外调用也--add-host
在幕后吗?
AWSVPC 模式是一种自定义模型,不使用基于标准容器的 docker 标志。换句话说,它们需要在“任务”级别重新实现(可用于任务内的所有容器),而我们根本没有实现这个标志(以及 searchDomains
等其他标志)。
在我的一个副项目中,我通过使用读取变量并配置容器本身的脚本启动容器来解决这个问题。文件是here,我是copy/pasting 为了方便起见:
#!/bin/bash
# when the variable is populated a search domain entry is added to resolv.conf at startup
# this is needed for the ECS service discovery given the app works by calling host names and not FQDNs
# a search domain can't be added to the container when using the awsvpc mode
# and the awsvpc mode is needed for A records (bridge only supports SRV records)
if [ $SEARCH_DOMAIN ]; then echo "search ${SEARCH_DOMAIN}" >> /etc/resolv.conf; fi
ruby /app/yelb-appserver.rb -o 0.0.0.0)
此 GH issue 中还有关于该主题的其他讨论。