bash正则表达式以获取docker容器端口号
所以我试图从我的docker集群中获取一个特定的端口号,这是因为我以后需要这个端口 当我做docker compose ps时,我得到以下输出bash正则表达式以获取docker容器端口号,bash,docker,Bash,Docker,所以我试图从我的docker集群中获取一个特定的端口号,这是因为我以后需要这个端口 当我做docker compose ps时,我得到以下输出 contaimer_db_1 docker-entrypoint.sh mysqld Up 3306/tcp container_node_1 /usr/bin/supervisord -n Up 0.0.0.0:3902->3902/tcp container
contaimer_db_1 docker-entrypoint.sh mysqld Up 3306/tcp
container_node_1 /usr/bin/supervisord -n Up 0.0.0.0:3902->3902/tcp
container_php_1 docker-php-entrypoint php-fpm Up 9000/tcp
container_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
我想从container\u node\u 1 3902获取端口号
到目前为止我
docker-compose ps | grep "[ :]\?[[:digit:]]\{4\}"
但这将获得所有端口,因为它们一行有4个数字。我如何更改它以确保它只获取节点端口
如果有任何帮助,节点容器将始终显示为0.0.0.0:1234->1234单独使用Awk并调用拆分函数两次
docker-compose ps | awk '$1=="container_node_1"{n=split($NF,arr1,"->"); split(arr1[n],arr2,"/"); print arr2[1]}'
将按预期提供端口号。这将适用于安装的任何符合POSIX的Awk
如果安装了GNU Awk,则可以使用其函数进行正则表达式匹配并提取端口号
docker-compose ps | awk '$1=="container_node_1"{print gensub(/.*->([[:digit:]]+)\/(.+)$/,"\\1","g",$NF)}'
对于内部使用的正则表达式。单独使用Awk并调用split函数两次
docker-compose ps | awk '$1=="container_node_1"{n=split($NF,arr1,"->"); split(arr1[n],arr2,"/"); print arr2[1]}'
将按预期提供端口号。这将适用于安装的任何符合POSIX的Awk
如果安装了GNU Awk,则可以使用其函数进行正则表达式匹配并提取端口号
docker-compose ps | awk '$1=="container_node_1"{print gensub(/.*->([[:digit:]]+)\/(.+)$/,"\\1","g",$NF)}'
对于内部使用的正则表达式。我宁愿使用docker inspect
范例
码头工人
名称命令状态端口
dockerpartkeepr_数据库_1 docker-entrypoint.sh mysqld Up 3306/tcp
dockerpartkeepr\u partkeepr\u 1 docker php入口点亚太地区。。。向上0.0.0.0:80->80/tcp
因此,我将尝试将端口链接到80
docker inspect-格式“{index index index.NetworkSettings.Ports 80/tcp 0.HostPort}”dockerpartkeepr\u partkeepr\u 1
这将显示
八十
看到我的答案了吗
更多解释,我宁愿使用docker inspect
范例
码头工人
名称命令状态端口
dockerpartkeepr_数据库_1 docker-entrypoint.sh mysqld Up 3306/tcp
dockerpartkeepr\u partkeepr\u 1 docker php入口点亚太地区。。。向上0.0.0.0:80->80/tcp
因此,我将尝试将端口链接到80
docker inspect-格式“{index index index.NetworkSettings.Ports 80/tcp 0.HostPort}”dockerpartkeepr\u partkeepr\u 1
这将显示
八十
看到我的答案了吗
更多解释你想得到的只是容器节点1?是的,我更愿意得到容器节点3902try awk-F'[/>]'/container\u节点1/{print$NF-1}的运行docker compose ps | awk-F'[/>'/financegilde830\u节点1/{print$NF-1}只会返回tcpOnly for container_node_1这是您想要的吗?是的,我更喜欢只获取container_node_1 3902; 2 try awk-F'[/>]'/container_node_1/{print$NF-1}运行docker compose ps | awk-F'[/>]'/financegilde830_node_1/{print$NF 1}只会返回tcpYou先生是我今天的救星:,5分钟过后,我会接受答案passed@killstreet:很高兴能帮上忙!您只需要一个拆分$NF,arr1,/->\/;打印arr1[2]先生,您今天是我的救世主:,在5分钟后接受答案passed@killstreet:很高兴能帮上忙!您只需要一个拆分$NF,arr1,/->\/;打印arr1[2]这仅在您知道所使用的端口时有效,我的端口可以是可变的。应该在我的问题中加上这一点。这只有在您知道所使用的端口时才起作用,我的端口可以是可变的。也许应该在我的问题上加上这个。