首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >命令数组中的docker-组合计算表达式

命令数组中的docker-组合计算表达式
EN

Stack Overflow用户
提问于 2018-11-10 18:28:42
回答 2查看 5.3K关注 0票数 1

下面是docker-compose.yml文件。在command部分中,我希望在命令传递给停靠引擎之前计算curl表达式,即首先计算我的curl,然后再用-ip 10.0.0.2选项运行容器。

代码语言:javascript
运行
复制
version: '2'
services:
  registrator:
    image: gliderlabs/registrator:v7
    container_name: registrator
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock
    command: ['-ip', '$$(curl -X GET -s http://169.254.169.254/latest/meta-data/local-ipv4)']

但是,没有对此进行评估,并且我的选项被传递为-ip $(curl -X GET -s http://169.254.169.254/latest/meta-data/local-ipv4)

然而,相应的停靠器运行命令正确地计算表达式,并且我的容器正确地以-ip 10.0.0.2选项开头:

代码语言:javascript
运行
复制
docker run -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:v7 -ip $(curl -X GET -s http://169.254.169.254/latest/meta-data/local-ipv4)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-10 22:35:40

命令行上的docker命令将工作,因为命令将由shell执行,而不是由docker映像执行,因此它将被解析。

command将覆盖默认命令(CMD) (请参阅https://docs.docker.com/compose/compose-file/#command),因此它不会在容器启动之前执行,而是作为容器中的主命令执行.

你可以这样做:

代码语言:javascript
运行
复制
version: '2'
services:
  registrator:
    image: gliderlabs/registrator:v7
    container_name: registrator
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock
    command: ['-ip', '${IP}']

然后用以下方式运行:

IP="$(curl -X GET -s http://169.254.169.254/latest/meta-data/local-ipv4)" docker-compose up

这将在shell中再次运行它,并将其分配给在docker-compose up命令期间可用的称为IP女巫的变量。您可以将该命令放入shell脚本中,以使其更容易。

票数 1
EN

Stack Overflow用户

发布于 2018-11-11 04:24:25

在网上搜索了几个小时后,我终于找到了下面的解决方案。要了解为什么这样做,请参考@Ivonet的答案。

我修改了Dockerfile,以便在容器启动时运行脚本。

代码语言:javascript
运行
复制
FROM gliderlabs/registrator:v7

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh && \
    apk update && \
    apk add curl

ENTRYPOINT ["/entrypoint.sh"]

脚本entrypoint.sh也非常简单。它首先检查是否可以调用端点。成功的响应将触发我的容器从正确的IP地址开始,而不成功的响应(用于本地测试)不会设置任何值。

代码语言:javascript
运行
复制
#!/bin/sh

LOCAL_IP=$(curl -s --connect-timeout 3 169.254.169.254/latest/meta-data/local-ipv4)
if [ $? -eq 0 ]; then
  /bin/registrator -ip $LOCAL_IP $@
else
  /bin/registrator $@
fi
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53242120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档