Support for docker images that set the USER directive. Changes the

docker user to root for the init script to configure the network,
then drops to the configured user (or root if one is not defined)
for continuing booting the image.
This commit is contained in:
Karim 2019-04-05 08:51:57 +01:00
parent dde01317e0
commit 7c3a38d379
2 changed files with 10 additions and 3 deletions

View File

@ -311,6 +311,7 @@ class DockerVM(BaseNode):
"Tty": True, "Tty": True,
"OpenStdin": True, "OpenStdin": True,
"StdinOnce": False, "StdinOnce": False,
"User": "root",
"HostConfig": { "HostConfig": {
"CapAdd": ["ALL"], "CapAdd": ["ALL"],
"Privileged": True, "Privileged": True,
@ -342,6 +343,9 @@ class DockerVM(BaseNode):
# Give the information to the container the list of volume path mounted # Give the information to the container the list of volume path mounted
params["Env"].append("GNS3_VOLUMES={}".format(":".join(self._volumes))) params["Env"].append("GNS3_VOLUMES={}".format(":".join(self._volumes)))
# Pass user configured for image to init script
params["Env"].append("GNS3_USER={}".format(image_infos.get("Config", {"User": ""})["User"]))
variables = self.project.variables variables = self.project.variables
if not variables: if not variables:
variables = [] variables = []

View File

@ -87,6 +87,9 @@ done
ifup -a -f ifup -a -f
# continue normal docker startup # continue normal docker startup
PATH="$OLD_PATH" GNS3_CMD="PATH=$OLD_PATH exec"
exec "$@" while test "$#" -gt 0 ; do
GNS3_CMD="${GNS3_CMD} \"${1//\"/\\\"}\""
shift
done
exec su ${GNS3_USER-root} -p -c "$GNS3_CMD"