对于我到目前为止尝试的所有入口点和命令,我收到此错误“没有这样的文件或目录。” 我需要: 1)使用对AWS的特殊curl请求为HostIP设置env变量 2)运行etcd容器,给它使用$ HostIP
的参数它似乎需要一个字符串数组,但我不确定它是如何工作的。我在想这些命令是:
/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)我是否需要使用逗号并为每个空格开始一个新字符串? 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
现在的问题是容器启动但使用localhost而不是0.0.0.0或我们使用来自AWS的curl获取的IP。它似乎遭受了某种错误并且回到了localhost。
答案 0 :(得分:0)
当从ECS仪表板命令行运行任务时,参数需要用逗号分隔,但请记住,传递给/bin/sh,-c,export HostIP=$(curl -s 169.254.169.254/latest/meta-data/local-ipv4) && etcd ...
的整个字符串是由子shell解释的单个参数。
换句话说,您的任务定义应如下所示:
...
if (Cache::has('user_' . $id)) {
$user = Cache::get('user_' . $id);
} else {
$user = User::with('location')->find($id);
if(!$user) {
return Response::view('errors/404', array());
}
Cache::put('user_' . $id, $user, 15);
}
...
但是,如果您可以控制图像,那么您可以考虑编写一个封装所有内容的自定义ENTRYPOINT脚本。