【发布时间】:2018-07-08 23:41:29
【问题描述】:
我们有一个 docker-compose.yml 文件来启动一个 db2 和我们测试框架的许多其他组件。启动 db2 后,我们必须附加到该容器并在其上运行一组 shell 脚本以创建模式定义等。
问题在于 docker-compose 为容器提供动态名称 - 每次我们用“运行”启动它们时它们都会改变。如何找到这次运行的 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=\K\w+')&& 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 和其余命令的 shell 脚本:
docker-compose -f docker-acceptance.yml run -d db2
printf "Waiting for db2 to warm-up *************************\n\n\n\n"
sleep 340
printf "Starting to initialize schema **********************\n\n\n\n"
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 容器的名称?
【问题讨论】:
标签: shell docker-compose sh