From 7d49dbe7d4a05223951ceec76230a893ad5c6798 Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Tue, 19 Mar 2019 18:57:19 +1100 Subject: [PATCH] FEATURE: add start-cmd to provide the command line used to launch container This feature is only part done, this is a work in progress. Sometimes it is handy to get the full docker command used to launch a container, this allows us to cleanly amend it prior to starting. This works like so: ``` sam@arch discourse_docker % ./launcher start-cmd redis + true run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e 'test=I am a test' -h arch-redis -e DOCKER_HOST_IP=172.17.0.1 --name redis -t -p 63799:6379 --expose 33333 -v /home/sam/Source/discourse_docker/shared:/shared --mac-address 02:3e:e9:30:d5:32 local_discourse/redis /sbin/boot ``` Though we really want it to output `docker` instead of `+ true`. It is tricky in bash cause we handle quoting of `-e` and so on which makes a straight echo not work as expected. That said this kludge does give me enough to actually run some tests so I welcome the progress Created this so I can run side-by-side tests on various containers --- launcher | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/launcher b/launcher index de92c17..d2ff6ad 100755 --- a/launcher +++ b/launcher @@ -13,6 +13,7 @@ usage () { echo " run: Run the given command with the config in the context of the last bootstrapped image" echo " rebuild: Rebuild a container (destroy old, bootstrap, start new)" echo " cleanup: Remove all containers that have stopped for > 24 hours" + echo " start-cmd: Generate docker command used to start container" echo echo "Options:" echo " --skip-prereqs Don't check launcher prerequisites" @@ -549,23 +550,26 @@ merge_user_args() { run_start() { - existing=`$docker_path ps | awk '{ print $1, $(NF) }' | grep " $config$" | awk '{ print $1 }'` - echo $existing - if [ ! -z $existing ] + if [ -z "$START_CMD_ONLY" ] then - echo "Nothing to do, your container has already started!" - exit 0 - fi + existing=`$docker_path ps | awk '{ print $1, $(NF) }' | grep " $config$" | awk '{ print $1 }'` + echo $existing + if [ ! -z $existing ] + then + echo "Nothing to do, your container has already started!" + exit 0 + fi - existing=`$docker_path ps -a | awk '{ print $1, $(NF) }' | grep " $config$" | awk '{ print $1 }'` - if [ ! -z $existing ] - then - echo "starting up existing container" - ( - set -x - $docker_path start $config - ) - exit 0 + existing=`$docker_path ps -a | awk '{ print $1, $(NF) }' | grep " $config$" | awk '{ print $1 }'` + if [ ! -z $existing ] + then + echo "starting up existing container" + ( + set -x + $docker_path start $config + ) + exit 0 + fi fi host_run @@ -606,7 +610,12 @@ run_start() { mac_address="--mac-address $($docker_path run $user_args -i --rm -a stdout -a stderr $image /bin/sh -c "echo $hostname | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/'")" fi + if [ ! -z "$START_CMD_ONLY" ] ; then + docker_path="true" + fi + set -x + $docker_path run --shm-size=512m $links $attach_on_run $restart_policy "${env[@]}" "${labels[@]}" -h "$hostname" \ -e DOCKER_HOST_IP="$docker_ip" --name $config -t "${ports[@]}" $volumes $mac_address $user_args \ $run_image $boot_command @@ -734,6 +743,12 @@ case "$command" in exit 0 ;; + start-cmd) + START_CMD_ONLY="1" + run_start + exit 0; + ;; + start) run_start exit 0 -- 2.25.1