如何检索由docker-compose.yml开始的确切容器名称 [英] How do I retrieve the exact container name started by docker-compose.yml
本文介绍了如何检索由docker-compose.yml开始的确切容器名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们有一个docker-compose.yml文件来调出我们的测试框架的DB2和许多其他组件。启动DB2后,我们必须附加到该容器,并在其上运行一组shell脚本以创建模式定义等。
问题是docker-compose为容器提供了动态名称-每次我们用"run"启动它们时,它们都会改变。如何找到这次运行的DB2容器的确切名称?!
以下摘录自我们的docker-compose.yml:
db2:
container_name: "bluecost-db2"
image: store/ibmcorp/db2_developer_c:11.1.3.3-x86_64
command: /bin/bash -c "groupadd bluecost -g 1006;adduser bluecost -u $$(id -u) -g $$(echo $$(id)| grep -oPm1 'gid=Kw+')&& echo "bluecost:bluecost" | chpasswd;usermod -a -G db2iadm1 bluecost;chown -R bluecost:db2iadm1 /home/bluecost/bluecostDB;mkdir /database/data;"
hostname: db2server
privileged: true
ports:
- 50001:50000
- 55000:55000
networks:
- back-tier
volumes:
- ./standalone/linuxScripts/bluecostDB:/home/bluecost/bluecostDB
restart: "no"
env_file:
- ./standalone/db2/.env_list
以下是启动db2和睡觉命令的外壳脚本:
docker-compose -f docker-acceptance.yml run -d db2
printf "Waiting for db2 to warm-up *************************
"
sleep 340
printf "Starting to initialize schema **********************
"
docker exec -d -t bluecost-db2 /bin/bash -c "cp /home/bluecost`/bluecostDB/*.* /home/db2inst;chmod +x /home/mydir/runBlueCostDBScript.sh;chown db2adm:db2adm /home/db2iadm/*.sql;chown db2adm:db2adm1 /home/db2inst/*.sh;mkdir /database/data/bluecostDB;chown -R db2adm:db2adm1 /database/data/bluecostDB;echo ./runBlueCostDBScript.sh | su - db2adm"`
请注意,上面该脚本的第一行运行DB2。这会起作用,容器会启动并预热,但是当最后一个docker exec命令运行时,它会用名称‘Bluecost-db2’引用该容器,而正在运行的容器名称略有不同:Bluecost-db2_run1、Bluecostdb2_run2等
如何找到要执行的确切名称?我发现了这个docker ps --format '{{.Image}} {{.Names}}'
,但它列出了所有正在运行的容器,可能有不止一个.如何仅获取正在运行的DB2容器的名称?
推荐答案
可以使用docker-compose ps
:
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------
our-project_airflow-postgres_1 docker-entrypoint.sh postgres Up (healthy) 5432/tcp
our-project_airflow_1 /bin/bash -c source initia ... Exit 0
our-project_healthchecker_1 /bin/sh -c ./compute-healt ... Up (unhealthy)
our-project_local-ingress_1 docker-entrypoint.sh postgres Up (healthy) 5432/tcp
our-project_local-s3_1 /usr/bin/docker-entrypoint ... Up (healthy) 9000/tcp
您也可以将其限制为服务:
$ docker-compose ps local-s3
Name Command State Ports
-------------------------------------------------------------------------------------------------------
gears-orchestration_local-s3_1 /usr/bin/docker-entrypoint ... Up (healthy) 9000/tcp
所以您需要的内容大致如下:
$ docker-compose ps local-s3 | tail -n +3 | awk '{ print $1 }'
gears-orchestration_local-s3_1
请注意,与所有docker
CLI命令一样,这些命令会严重换行。非交互式shell不会有这个问题,但是在终端仿真程序中,您可能会看到命令失败。
这篇关于如何检索由docker-compose.yml开始的确切容器名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文