blob: 5f52a16d1705511789764a4785007b5ec132fcde (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#!/bin/bash
USER_CONTAINER_CONFIG=""
echo "+ source user_config $USER_CONTAINER_CONFIG"
source $USER_CONTAINER_CONFIG
load_image () {
IMAGE_SIZE=$(stat --printf="%s" $VM_DISKFILE_RO)
# check file size of VM_DISKFILE_RO is equals to 4096 = 4kB (because of padding)
if [[ $IMAGE_SIZE -eq 4096 ]]; then
echo "+ build container image with build_context"
echo "+ docker build --tag $CONTAINER_IMAGE_NAME $CONTAINER_BUILD_CONTEXT"
docker build --tag $CONTAINER_IMAGE_NAME $CONTAINER_BUILD_CONTEXT
else
# In this case a pre build container image (tar archive from "docker save ...")
# will be loaded into the local docker daemon.
echo "+ load container image"
# create TMP_FILE for image
local TMP_FILE=$(mktemp)
# write currently existing image ids into TMP_FILE
cp $VM_DISKFILE_RO $TMP_FILE
# recieve the RepoTag form the manifest.json inside the tar
local REPO_TAG=$(tar -axf $TMP_FILE manifest.json -O | jq -r '.[].RepoTags[0]')
# load image from tar file
docker load --input $TMP_FILE
# rename image
docker tag "$REPO_TAG" "$CONTAINER_IMAGE_NAME"
rm -f -- "$TMP_FILE"
fi
retval=$?
return $retval
}
main ()
{
# TODO only check by image name could be bad, images whith a same name could exist
# check if the container_image_name already loaded in docker daemon
if [[ -z $(docker images $CONTAINER_IMAGE_NAME -q) ]]; then
echo "+ Image unknown by docker daemon ..."
load_image
if [[ "$retval" != "0" ]]; then
echo "...could not build/load container image!...giving up..."
return -1
fi
fi
if [[ -n "$(docker ps -aq)" ]]; then
echo "+ cleanup running container"
docker rm --force $(docker ps -aq) > /dev/null
fi
echo "+ start container..."
echo "+ docker run $CONTAINER_RUN_OPTIONS $CONTAINER_BIND_MOUNT_STRING $CONTAINER_IMAGE_NAME"
docker run $CONTAINER_RUN_OPTIONS $CONTAINER_BIND_MOUNT_STRING $CONTAINER_IMAGE_NAME
if [[ "$?" != "0" ]]; then
echo "...container start failed!...giving up..."
return -1
fi
if [[ -n $RUNSCRIPT ]]; then
echo "+ execute user runscript"
/bin/bash $RUNSCRIPT
fi
}
main
# keeping terminal open
bash
|