Merge pull request #5300 from dokku/5287-disable-init
Add the ability to disable the init process
This commit is contained in:
@@ -37,6 +37,22 @@ Once set, you may re-enable it by setting a blank value for `disable-chown`:
|
||||
dokku scheduler-docker-local:set node-js-app disable-chown
|
||||
```
|
||||
|
||||
### Disabling the init process
|
||||
|
||||
The `scheduler-docker-local` injects an init process by default via the `--init`. For some apps - such as those where the built docker image uses S6 as the init - this may be undesirable and cause issues with process starts. You may disable this by running the following `scheduler-docker-local:set` command for your application:
|
||||
|
||||
```shell
|
||||
dokku scheduler-docker-local:set node-js-app init-process false
|
||||
```
|
||||
|
||||
Once set, you may re-enable it by setting a blank value for `init-process`:
|
||||
|
||||
```shell
|
||||
dokku scheduler-docker-local:set node-js-app init-process
|
||||
```
|
||||
|
||||
All image containers with the label `org.opencontainers.image.vendor=linuxserver.io` will have the automatic init process injection force-disabled without further intervention.
|
||||
|
||||
### Deploying Process Types in Parallel
|
||||
|
||||
> New as of 0.25.5
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
set -eo pipefail
|
||||
[[ $DOKKU_TRACE ]] && set -x
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions"
|
||||
source "$PLUGIN_AVAILABLE_PATH/checks/functions"
|
||||
|
||||
main() {
|
||||
declare APP="$1" IMAGE_SOURCE_TYPE="$2" IMAGE="$3" IMAGE_TAG="$4" PROC_TYPE="$5" PROC_COUNT="$6"
|
||||
local CONTAINER_INDEX=1
|
||||
local image_vendor
|
||||
|
||||
dokku_log_info1 "Deploying $PROC_TYPE (count=$PROC_COUNT)"
|
||||
DOKKU_CHECKS_DISABLED="$(is_app_proctype_checks_disabled "$APP" "$PROC_TYPE")"
|
||||
@@ -35,8 +37,19 @@ main() {
|
||||
CONTAINER_INDEX=$((CONTAINER_INDEX + 1))
|
||||
done
|
||||
|
||||
INJECT_INIT_FLAG="$(fn-plugin-property-get "scheduler-docker-local" "$APP" "init-process" "")"
|
||||
if [[ -z "$INJECT_INIT_FLAG" ]]; then
|
||||
# special-case linuxserver.io images as those always use an s6-overlay
|
||||
image_vendor="$("$DOCKER_BIN" image inspect --format '{{ index .Config.Labels "org.opencontainers.image.vendor" }}' "$IMAGE")"
|
||||
if [[ "$image_vendor" == "linuxserver.io" ]]; then
|
||||
INJECT_INIT_FLAG="false"
|
||||
else
|
||||
INJECT_INIT_FLAG="true"
|
||||
fi
|
||||
fi
|
||||
|
||||
PARALLEL_DEPLOY_COUNT="$(plugn trigger "app-json-process-deploy-parallelism" "$APP" "$PROC_TYPE")"
|
||||
DOKKU_CHECKS_DISABLED="$DOKKU_CHECKS_DISABLED" parallel --will-cite --halt soon,fail=1 --jobs "$PARALLEL_DEPLOY_COUNT" --ungroup <"$PROCESS_TMP_FILE"
|
||||
DOKKU_CHECKS_DISABLED="$DOKKU_CHECKS_DISABLED" INJECT_INIT_FLAG="$INJECT_INIT_FLAG" parallel --will-cite --halt soon,fail=1 --jobs "$PARALLEL_DEPLOY_COUNT" --ungroup <"$PROCESS_TMP_FILE"
|
||||
|
||||
# cleanup when we scale down
|
||||
if [[ "$PROC_COUNT" == 0 ]]; then
|
||||
|
||||
@@ -19,7 +19,9 @@ main() {
|
||||
DOCKER_ARGS+=" --label=com.dokku.process-type=$PROC_TYPE --label=com.dokku.dyno=$DYNO"
|
||||
DOCKER_ARGS+=" --env=DYNO=$DYNO"
|
||||
DOCKER_ARGS+=" --name=$APP.$DYNO.upcoming-$RANDOM"
|
||||
DOCKER_ARGS+=" --init"
|
||||
if [[ "$INJECT_INIT_FLAG" == "true" ]]; then
|
||||
DOCKER_ARGS+=" --init"
|
||||
fi
|
||||
DOCKER_ARGS+=" $DOCKER_RUN_LABEL_ARGS $DOKKU_GLOBAL_RUN_ARGS "
|
||||
DOCKER_ARGS+=$(: | plugn trigger docker-args-process-deploy "$APP" "$IMAGE_SOURCE_TYPE" "$IMAGE_TAG" "$PROC_TYPE" "$CONTAINER_INDEX")
|
||||
[[ "$DOKKU_TRACE" ]] && DOCKER_ARGS+=" --env=TRACE=true"
|
||||
|
||||
@@ -37,6 +37,7 @@ cmd-scheduler-docker-local-report-single() {
|
||||
verify_app_name "$APP"
|
||||
local flag_map=(
|
||||
"--scheduler-docker-local-disable-chown: $(fn-plugin-property-get "scheduler-docker-local" "$APP" "disable-chown" "")"
|
||||
"--scheduler-docker-local-init-process: $(fn-plugin-property-get "scheduler-docker-local" "$APP" "init-process" "true")"
|
||||
"--scheduler-docker-local-parallel-schedule-count: $(fn-plugin-property-get "scheduler-docker-local" "$APP" "parallel-schedule-count" "")"
|
||||
)
|
||||
|
||||
|
||||
@@ -9,13 +9,13 @@ cmd-scheduler-docker-local-set() {
|
||||
declare cmd="scheduler-docker-local:set"
|
||||
[[ "$1" == "$cmd" ]] && shift 1
|
||||
declare APP="$1" KEY="$2" VALUE="$3"
|
||||
local VALID_KEYS=("disable-chown" "parallel-schedule-count")
|
||||
local VALID_KEYS=("disable-chown" "init-process" "parallel-schedule-count")
|
||||
verify_app_name "$APP"
|
||||
|
||||
[[ -z "$KEY" ]] && dokku_log_fail "No key specified"
|
||||
|
||||
if ! fn-in-array "$KEY" "${VALID_KEYS[@]}"; then
|
||||
dokku_log_fail "Invalid key specified, valid keys include: disable-chown, parallel-schedule-count"
|
||||
dokku_log_fail "Invalid key specified, valid keys include: disable-chown, init-process, parallel-schedule-count"
|
||||
fi
|
||||
|
||||
if [[ -n "$VALUE" ]]; then
|
||||
|
||||
@@ -55,3 +55,49 @@ teardown() {
|
||||
assert_output "Host(\`$TEST_APP.dokku.me\`)"
|
||||
assert_success
|
||||
}
|
||||
|
||||
@test "(scheduler-docker-local) init-process" {
|
||||
run create_app
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run deploy_app
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "docker inspect --format '{{.HostConfig.Init}}' $TEST_APP.web.1"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
assert_output "true"
|
||||
|
||||
run /bin/bash -c "docker exec $TEST_APP.web.1 ps auxf"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
assert_output_contains "docker-init"
|
||||
|
||||
run /bin/bash -c "dokku scheduler-docker-local:set $TEST_APP init-process false"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "dokku ps:rebuild $TEST_APP"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "docker inspect --format '{{.HostConfig.Init}}' $TEST_APP.web.1"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
assert_output "<nil>"
|
||||
|
||||
run /bin/bash -c "docker exec $TEST_APP.web.1 ps auxf"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
assert_output_contains "docker-init" 0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user