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.
pull/1572/head
Karim 5 years ago
parent dde01317e0
commit 7c3a38d379

@ -311,6 +311,7 @@ class DockerVM(BaseNode):
"Tty": True,
"OpenStdin": True,
"StdinOnce": False,
"User": "root",
"HostConfig": {
"CapAdd": ["ALL"],
"Privileged": True,
@ -342,6 +343,9 @@ class DockerVM(BaseNode):
# Give the information to the container the list of volume path mounted
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
if not variables:
variables = []

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

Loading…
Cancel
Save