bash正则expression式来获得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_php_1 docker-php-entrypoint php-fpm Up 9000/tcp container_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
我想要的是从container_node_1 3902的端口号
到目前为止我得到了
docker-compose ps | grep "[ :]\?[[:digit:]]\{4\}"
但是由于它们连续有4个数字,所以会得到所有的端口。 我将如何改变这一点,以确保它只会得到节点端口?
如果有任何帮助,节点容器将始终显示为0.0.0.0:1234-> 1234
单独使用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
,则可以使用其gensub()
函数执行正则expression式匹配并提取端口号,
docker-compose ps | awk '$1=="container_node_1"{print gensub(/.*->([[:digit:]]+)\/(.+)$/,"\\1","g",$NF)}'
里面使用正则expression式的RegEx Demo 。
我宁愿使用docker inspect
例
docker-compose ps
名称命令状态端口
dockerpartkeepr_database_1 docker-entrypoint.sh mysqld Up 3306 / tcp
dockerpartkeepr_partkeepr_1 docker-php-entrypoint apac … Up 0.0.0.0:80->80/tcp
所以我会试着把端口连接到80
docker inspect --format '{{ (index (index .NetworkSettings.Ports "80/tcp") 0).HostPort }}' dockerpartkeepr_partkeepr_1
这将显示
80
看到我的答案如何获取ENVvariables进行Docker检查时
为更多的解释