【问题标题】:Copy output of a shell command to a variable and need to make output data's comma separated将 shell 命令的输出复制到变量中,并且需要使输出数据以逗号分隔
【发布时间】:2019-12-25 17:37:55
【问题描述】:

我正在尝试获取 docker 容器的 IP,并且需要以逗号分隔的形式传递 IP。

使用下面的命令我可以得到容器的 ip

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(sudo docker ps -q --filter "name=slave")

输出-->

> 10.17.0.4
> 10.17.0.3
> 10.17.0.2

需要帮助将输出 IP 保存到变量并处理 IP 以逗号分隔,例如 10.17.0.4,10.17.0.3,10.17.0.2

【问题讨论】:

  • 将数据通过管道传输到tr。例如,sudo ... | tr \\n , | sed 's/,$//'
  • 这些 IP 地址在许多情况下基本上是无用的:您无法从其他主机访问它们,您无法从 MacOS 上的同一主机访问它们,并且每当您删除和重新创建容器时它们都会改变。我会找到一种不同的方式来实现您的更高级别的目标。

标签: bash docker unix sh concat


【解决方案1】:

您使用的是旧版本的 Docker(信息)。所以下面的命令在新版本的 Docker 中不起作用

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(sudo docker ps -q --filter "name=slave") | sed -n -e 'H;${x;s/\n/,/g;s/^,//;p;}'

在新版本的 Docker 中,您可以尝试以下命令。

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q  --filter ancestor=adminer) | sed -n -e 'H;${x;s/\n/,/g;s/^,//;p;}'

您可以在新版本中使用以下命令根据图像进行过滤,这将返回所有容器 ID,否则旧命令将在新版本中仅返回一个容器。

docker ps -q  --filter ancestor=image_name

【讨论】:

    猜你喜欢
    • 2012-10-22
    • 2016-09-08
    • 2011-08-13
    • 2015-08-19
    • 2013-12-28
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多