bash – 在docker容器中执行for循环
发布时间:2020-12-15 21:19:28 所属栏目:安全 来源:网络整理
导读:我使用一个docker容器来执行curl docker run --rm --network=mynetwork tutum/curl for i in `seq 1 10`; do curl -s http://Url; done 但输出是-bash:语法错误接近意外tokendo’. 如何以正确的方式执行此操作.我希望看到输出而不进入容器或检查他们的日志.
我使用一个docker容器来执行curl
docker run --rm --network=mynetwork tutum/curl for i in `seq 1 10`; do curl -s http://Url; done 但输出是-bash:语法错误接近意外tokendo’. 例如,这有效: docker run --rm -d -it --network=mynetwork tutum/curl /bin/sh docker exec -it 4e8cb1e8c9fb bash root@4e8cb1e8c9fb:/# for i in `seq 1 20`; do curl http://Url; done curl: (6) Could not resolve host: url curl: (6) Could not resolve host: url curl: (6) Could not resolve host: url curl: (6) Could not resolve host: url curl: (6) Could not resolve host: url curl: (6) Could not resolve host: url ... 解决方法
正如Aaron指出的那样,你需要在容器内部使用一个shell来解析这一行,而不是让它由解析docker命令的同一个shell解析.默认情况下,如果您没有定义命令,docker会将命令传递给/ bin / sh入口点.如果你尝试转义docker cli上的任何shell字符,它会“帮助”你在/ bin / sh命令行中转义它们,这会阻止你传递像a;通过并在那里通过shell解析它或引用你的脚本并通过/ bin / sh -c解析它.如果您引用脚本而不解析它,您会发现它查找具有完整字符串名称的可执行文件.
正如您所发现的,解决方案是使用/ bin / sh -c“您的脚本”作为命令运行shell.请注意,您运行的脚本需要是/ bin / sh -c的单个参数,其他任何内容都将作为args传递给该脚本(您可以使用$0,$1等读取). 生成的命令应如下所示: docker run --rm --network=mynetwork tutum/curl /bin/sh -c 'for i in `seq 1 10`; do curl -s http://Url; done' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |