docker - docker-compose 在命令数组中计算表达式
问题描述
我有以下 docker-compose.yml 文件。在本command
节中,我想curl
在命令传递给 docker 引擎之前评估表达式,即我的 curl 应该首先被评估,然后我的容器应该使用-ip 10.0.0.2
选项运行。
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)
然而,相应的 docker run 命令正确地评估了表达式,并且我的容器正确地以-ip 10.0.0.2
选项开头:
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)
解决方案
命令行上的 docker 命令将起作用,因为该命令将由 shell 而不是 docker 映像执行,因此它将被解析。
docker-composecommand
将覆盖默认命令(CMD)(请参阅https://docs.docker.com/compose/compose-file/#command),因此它不会在容器启动之前执行,而是作为主要命令容器...
您可以执行以下操作:
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 中运行它并将其分配给一个名为 IP 的变量,女巫将在docker-compose up
命令期间可用。您可以将该命令放在 shell 脚本中以使其更容易。
推荐阅读
- ios - 如何创建全宽 VStack?
- c# - 在 PosExplorer.GetDevices() 中找不到 BC-95AC 热敏打印机
- asp.net - 如何解决文件上传代码C#中的错误?
- asp.net-core - Asp Core 3.0 - 在发出请求之前不调用 Program.Main 和 Startup
- javascript - 使用 gulp 创建 .js、.min.js 和 .js.map 文件?
- assembly - 如何改进这个汇编语言代码,以便我可以包含 10 个数字?
- python - 使用 groupby 确定家庭规模
- amazon-web-services - 错误请求连接到 AWS ECS 上不同 docker 容器中的 spring-boot 应用程序
- django - 如何解决这个简单的问题?
- javascript - 在组件道具更改时触发 CSS 过渡