Merge pull request #2018 from pascalw/feature/dokku-run-from-procfile

Support running Procfile commands using `dokku run`
This commit is contained in:
Michael Hobbs
2016-06-16 12:42:01 -07:00
committed by GitHub
4 changed files with 35 additions and 0 deletions

View File

@@ -15,6 +15,17 @@ The `run` command can be used to run a one-off process for a specific command. T
dokku run node-js-app ls -lah
```
The `run` command can also be used to run a command defined in your Procfile:
```
console: bundle exec racksh
```
```shell
# runs `bundle exec racksh` in the `/app` directory of the application `my-app`
dokku run my-app console
```
If you want to remove the container after a command has started, you can run the following command:
```shell

View File

@@ -1,6 +1,7 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_CORE_AVAILABLE_PATH/ps/functions"
source "$PLUGIN_AVAILABLE_PATH/config/functions"
dokku_run_cmd() {
@@ -30,6 +31,18 @@ dokku_run_cmd() {
has_tty && DOKKU_RUN_OPTS+=" -i -t"
is_image_herokuish_based "$IMAGE" && local EXEC_CMD="/exec"
DOKKU_QUIET_OUTPUT=1 extract_procfile "$APP"
POTENTIAL_PROCFILE_KEY="$1"
PROC_CMD=$(get_cmd_from_procfile "$APP" "$POTENTIAL_PROCFILE_KEY" || echo '')
remove_procfile "$APP"
if [ ! -z "$PROC_CMD" ]; then
dokku_log_info1 "Found '$POTENTIAL_PROCFILE_KEY' in Procfile, running that command"
set -- "$PROC_CMD" "${@:2}"
fi
# shellcheck disable=SC2086
docker run $DOKKU_GLOBAL_RUN_ARGS $DOKKU_RUN_OPTS $DOCKER_ARGS $IMAGE $EXEC_CMD "$@"
}

View File

@@ -6,6 +6,7 @@
cron: node worker.js
web: node web.js # testing inline comment
worker: node worker.js
custom: echo -n
# Old version with separate processes (use this if you have issues with the threaded version)

View File

@@ -149,6 +149,16 @@ build_nginx_config() {
assert_success
}
@test "(core) run command from Procfile" {
deploy_app
run /bin/bash -c "dokku run $TEST_APP custom 'hi dokku' | tail -n 1"
echo "output: "$output
echo "status: "$status
assert_success
assert_output 'hi dokku'
}
@test "(core) port exposure (dockerfile raw port)" {
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
cat<<EOF > $DOCKERFILE