在ECS中运行一个etcd容器需要什么入口点/命令?

到目前为止我已经尝试了所有的入口点和命令,我得到这个错误“没有这样的文件或目录”。 我需要:1)使用特殊的curl请求为AWS设置一个envvariables2)运行etcd容器,给它使用$ HostIP

它似乎需要一个string数组,但我不知道它是如何工作的。 我在想这些命令是:

/bin/sh -c "export export HostIP=$(curl -s 169.254.169.254/latest/meta-data/local-ipv4)" 

 etcd -advertise-client-urls http://${HostIP}:2379,http://${HostIP}:4001 -other-similar-args... 

但我需要将它们更改为逗号分隔。

1)我如何转义逗号/引号? 2)我是否需要使用逗号,并为每个空间启动一个新的string? 3)有没有人有一个工作的例子?

更新:我做了一个包含这个的entrypoint.sh一个自定义容器:

  #!/bin/sh export HOST=$(curl -s 169.254.169.254/latest/meta-data/local-hostname) export HostIP=$(curl -s 169.254.169.254/latest/meta-data/local-ipv4) /usr/local/bin/etcd -name etcd0 \ -advertise-client-urls http://${HostIP}:2379,http://${HostIP}:4001 \ -listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 \ -initial-advertise-peer-urls http://${HostIP}:2380 \ -listen-peer-urls http://0.0.0.0:2380 \ -initial-cluster-token etcd-cluster-1 \ -initial-cluster etcd0=http://${HostIP}:2380 \ -initial-cluster-state new 

现在问题是容器启动,但使用本地主机而不是0.0.0.0或我们从AWS获取curl的IP。 它似乎遭受某种错误,并回落到本地主机。

从ECS仪表板运行任务命令行参数需要用逗号分隔,但请记住,传递给sh -c的整个string是由子shell解释的单个参数。

换句话说,你的任务定义应该如下所示:

 /bin/sh,-c,export HostIP=$(curl -s 169.254.169.254/latest/meta-data/local-ipv4) && etcd ... 

但是,如果你有对图像的控制,那么你可以考虑编写一个自定义的ENTRYPOINT脚本封装所有这些。