加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读