mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-31 10:37:56 +00:00 
			
		
		
		
	 64a8f9aeff
			
		
	
	64a8f9aeff
	
	
	
		
			
			The use of the `--privileged` [flag](https://docs.docker.com/engine/reference/commandline/run/#options) is not recommended, as it does not adhere to the principle of least privilege.
		
			
				
	
	
		
			105 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/dumb-init /bin/sh
 | |
| set -e
 | |
| 
 | |
| # Note above that we run dumb-init as PID 1 in order to reap zombie processes
 | |
| # as well as forward signals to all processes in its session. Normally, sh
 | |
| # wouldn't do either of these functions so we'd leak zombies as well as do
 | |
| # unclean termination of all our sub-processes.
 | |
| 
 | |
| # Prevent core dumps
 | |
| ulimit -c 0
 | |
| 
 | |
| # Allow setting VAULT_REDIRECT_ADDR and VAULT_CLUSTER_ADDR using an interface
 | |
| # name instead of an IP address. The interface name is specified using
 | |
| # VAULT_REDIRECT_INTERFACE and VAULT_CLUSTER_INTERFACE environment variables. If
 | |
| # VAULT_*_ADDR is also set, the resulting URI will combine the protocol and port
 | |
| # number with the IP of the named interface.
 | |
| get_addr () {
 | |
|     local if_name=$1
 | |
|     local uri_template=$2
 | |
|     ip addr show dev $if_name | awk -v uri=$uri_template '/\s*inet\s/ { \
 | |
|       ip=gensub(/(.+)\/.+/, "\\1", "g", $2); \
 | |
|       print gensub(/^(.+:\/\/).+(:.+)$/, "\\1" ip "\\2", "g", uri); \
 | |
|       exit}'
 | |
| }
 | |
| 
 | |
| if [ -n "$VAULT_REDIRECT_INTERFACE" ]; then
 | |
|     export VAULT_REDIRECT_ADDR=$(get_addr $VAULT_REDIRECT_INTERFACE ${VAULT_REDIRECT_ADDR:-"http://0.0.0.0:8200"})
 | |
|     echo "Using $VAULT_REDIRECT_INTERFACE for VAULT_REDIRECT_ADDR: $VAULT_REDIRECT_ADDR"
 | |
| fi
 | |
| if [ -n "$VAULT_CLUSTER_INTERFACE" ]; then
 | |
|     export VAULT_CLUSTER_ADDR=$(get_addr $VAULT_CLUSTER_INTERFACE ${VAULT_CLUSTER_ADDR:-"https://0.0.0.0:8201"})
 | |
|     echo "Using $VAULT_CLUSTER_INTERFACE for VAULT_CLUSTER_ADDR: $VAULT_CLUSTER_ADDR"
 | |
| fi
 | |
| 
 | |
| # VAULT_CONFIG_DIR isn't exposed as a volume but you can compose additional
 | |
| # config files in there if you use this image as a base, or use
 | |
| # VAULT_LOCAL_CONFIG below.
 | |
| VAULT_CONFIG_DIR=/vault/config
 | |
| 
 | |
| # You can also set the VAULT_LOCAL_CONFIG environment variable to pass some
 | |
| # Vault configuration JSON without having to bind any volumes.
 | |
| if [ -n "$VAULT_LOCAL_CONFIG" ]; then
 | |
|     echo "$VAULT_LOCAL_CONFIG" > "$VAULT_CONFIG_DIR/local.json"
 | |
| fi
 | |
| 
 | |
| # If the user is trying to run Vault directly with some arguments, then
 | |
| # pass them to Vault.
 | |
| if [ "${1:0:1}" = '-' ]; then
 | |
|     set -- vault "$@"
 | |
| fi
 | |
| 
 | |
| # Look for Vault subcommands.
 | |
| if [ "$1" = 'server' ]; then
 | |
|     shift
 | |
|     set -- vault server \
 | |
|         -config="$VAULT_CONFIG_DIR" \
 | |
|         -dev-root-token-id="$VAULT_DEV_ROOT_TOKEN_ID" \
 | |
|         -dev-listen-address="${VAULT_DEV_LISTEN_ADDRESS:-"0.0.0.0:8200"}" \
 | |
|         "$@"
 | |
| elif [ "$1" = 'version' ]; then
 | |
|     # This needs a special case because there's no help output.
 | |
|     set -- vault "$@"
 | |
| elif vault --help "$1" 2>&1 | grep -q "vault $1"; then
 | |
|     # We can't use the return code to check for the existence of a subcommand, so
 | |
|     # we have to use grep to look for a pattern in the help output.
 | |
|     set -- vault "$@"
 | |
| fi
 | |
| 
 | |
| # If we are running Vault, make sure it executes as the proper user.
 | |
| if [ "$1" = 'vault' ]; then
 | |
|     if [ -z "$SKIP_CHOWN" ]; then
 | |
|         # If the config dir is bind mounted then chown it
 | |
|         if [ "$(stat -c %u /vault/config)" != "$(id -u vault)" ]; then
 | |
|             chown -R vault:vault /vault/config || echo "Could not chown /vault/config (may not have appropriate permissions)"
 | |
|         fi
 | |
| 
 | |
|         # If the logs dir is bind mounted then chown it
 | |
|         if [ "$(stat -c %u /vault/logs)" != "$(id -u vault)" ]; then
 | |
|             chown -R vault:vault /vault/logs
 | |
|         fi
 | |
| 
 | |
|         # If the file dir is bind mounted then chown it
 | |
|         if [ "$(stat -c %u /vault/file)" != "$(id -u vault)" ]; then
 | |
|             chown -R vault:vault /vault/file
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
|     if [ -z "$SKIP_SETCAP" ]; then
 | |
|         # Allow mlock to avoid swapping Vault memory to disk
 | |
|         setcap cap_ipc_lock=+ep $(readlink -f $(which vault))
 | |
| 
 | |
|         # In the case vault has been started in a container without IPC_LOCK privileges
 | |
|         if ! vault -version 1>/dev/null 2>/dev/null; then
 | |
|             >&2 echo "Couldn't start vault with IPC_LOCK. Disabling IPC_LOCK, please use --cap-add IPC_LOCK"
 | |
|             setcap cap_ipc_lock=-ep $(readlink -f $(which vault))
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
|     if [ "$(id -u)" = '0' ]; then
 | |
|       set -- su-exec vault "$@"
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| exec "$@"
 |