54 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
1a376c3622 fix: prevent command injection via docker options eval
Values supplied through docker options, `--ttl-seconds`, and `-e` flowed into a Bash `eval` during build, deploy, and run, letting a low-privileged user execute arbitrary commands on the host as the dokku user. These arguments are now tokenized and passed through to the container verbatim, without shell expansion. A one-time migration repairs stored labels whose backticks were saved with a stray backslash so Traefik-style rules stay valid on the next deploy.
2026-07-19 01:42:12 -04:00
Jose Diaz-Gonzalez
5d802e3cf4 fix: separate docker-args outputs to avoid arg collisions
Emitting the restart policy as a `--restart` argument from a `docker-args-process-deploy` trigger exposed a latent gluing bug: proxy and builder triggers concatenated `$STDIN$output` with no separator, and the scheduler and builders appended `docker-args-process-*` output directly onto the older `docker-args-*` output, so adjacent arguments could merge into values like `--restart=on-failure:10--label`. A space is now inserted at both the trigger echo and the concatenation so arguments always stay separated.
2026-05-28 04:16:55 -04:00
Jose Diaz-Gonzalez
effa9d37cf fix: add launcher entrypoint for CNB images on dokku run and cron:run
The scheduler-run script classified CNB-based images as `herokuish` because
`is_image_herokuish_based` returns true for them, which caused the
`docker-args-process-run` trigger for builder-pack to skip injecting
`--entrypoint launcher`. Without that flag the container fell back to the
image entrypoint (`/cnb/process/web`) and dropped the user-supplied
arguments. Mirror the deploy-side detection so CNB images set
`IMAGE_SOURCE_TYPE=pack`, allowing the launcher entrypoint to be added.
2026-04-29 05:39:56 -04:00
Jose Diaz-Gonzalez
915172c0c5 fix: move proxy-port properties to proxy plugin and fix CI failures
- Move proxy-port and proxy-ssl-port properties from ports plugin to
  proxy plugin where they conceptually belong
- Generalize proxy:set to handle any property (matching ps:set pattern)
  instead of only handling the type property
- Fix apps:set --global flag parsing (pflag treats --global as a flag,
  not an argument — must be defined explicitly like ps:set does)
- Add missing property-functions source to scheduler-docker-local
  shell scripts (scheduler-enter, scheduler-run, scheduler-deploy,
  check-deploy, bin/scheduler-deploy-process-container)
- Update nginx-vhosts property references from ports to proxy plugin
- Update tests to use proxy:set for proxy-port properties
2026-04-25 17:19:42 -04:00
Jose Diaz-Gonzalez
1308e21947 feat: migrate environment variables to plugin properties
Standardize how environment variables are migrated to properties during
install triggers and migrate all remaining DOKKU_* config vars to their
appropriate plugin properties.

Adds a reusable MigrateConfigToProperties() function in the common
package with Transform callback and ListProperty support, plus a
migrate-config-to-property subcommand for the prop binary so shell
plugins can use the same code path.

Migrated variables and their new property owners:
- DOKKU_APP_PROXY_TYPE/DOKKU_PROXY_TYPE → proxy type
- DOKKU_DISABLE_PROXY → proxy disabled
- DOKKU_PROXY_PORT → ports proxy-port
- DOKKU_PROXY_SSL_PORT → ports proxy-ssl-port
- DOKKU_APP_RESTORE → ps restore
- DOKKU_SKIP_DEPLOY → ps skip-deploy
- DOKKU_START_CMD → ps start-cmd
- DOKKU_DOCKERFILE_START_CMD → ps dockerfile-start-cmd
- DOKKU_DISABLE_APP_AUTOCREATION → apps disable-autocreation
- DOKKU_APP_SHELL → scheduler shell
- DOKKU_SKIP_CLEANUP → builder skip-cleanup
- DOKKU_CHECKS_DISABLED → checks disabled
- DOKKU_CHECKS_SKIPPED → checks skipped
- DOKKU_CHECKS_WAIT → checks wait
- DOKKU_CHECKS_TIMEOUT → checks timeout
- DOKKU_CHECKS_ATTEMPTS → checks attempts
- DOKKU_DEFAULT_CHECKS_WAIT → checks default-wait
- DOKKU_SKIP_ALL_CHECKS → checks disabled (legacy)
- DOKKU_SKIP_DEFAULT_CHECKS → checks skipped (legacy)

Also refactors existing bespoke migration loops in scheduler, ports, ps,
builder, and nginx-vhosts plugins to use the standardized utility.

Removes DOKKU_PARALLEL_ARGUMENTS from documentation (unused in core).
Deprecates fn-migrate-config-to-property bash function.

closes #1558
2026-04-25 05:11:07 -04:00
Jose Diaz-Gonzalez
9f8058dd78 Merge pull request #8114 from dokku/8052-run-exec
Ensure we can execute run commands when exec is executed as part of an entrypoint
2025-11-19 21:40:36 -05:00
Jose Diaz-Gonzalez
6f095271e1 fix: ensure we can execute run commands when exec is executed as part of an entrypoint
Closes #8052
2025-11-19 20:34:51 -05:00
Jose Diaz-Gonzalez
a6d65c821f feat: implement cron and one-off run task TTLs
Closes #7938
2025-11-18 16:46:31 -05:00
Jose Diaz-Gonzalez
d9e5182399 Merge pull request #7989 from dokku/7988-prevent-overlap
Add support to prevent overlapping execution of cron tasks
2025-11-15 17:45:50 -05:00
Corey Taylor
00411decf5 Add process-type label for run with procfile cmd 2025-11-15 02:05:58 -06:00
Jose Diaz-Gonzalez
42a92eb654 feat: add support for replace concurrency policy 2025-11-13 01:55:12 -05:00
Jose Diaz-Gonzalez
bacbc6d90d fix: correctly check for running containers when concurrency policy is forbid
We cannot grab a lock as cron:run with --detach will release the lock. Instead, just check if any containers for the specified cron_id are running and exit.
2025-11-13 01:54:56 -05:00
Corey Taylor
983115c827 Add test for cron concurrency policy 2025-11-10 03:11:08 -05:00
Jose Diaz-Gonzalez
20be426125 feat: add support for locking in docker-local commands 2025-11-10 03:07:33 -05:00
Jose Diaz-Gonzalez
874f2dfaf4 feat: set the platform flag in order to run amd64 images on arm64 deploy targets
This allows folks to use herokuish, pack, and lambda built-images on arm64 servers.

Closes #6312
2024-01-19 06:37:48 -05:00
Jose Diaz-Gonzalez
5ffbcf24de fix: always set -- on docker run commands internally to avoid parsing flags on specified commands 2024-01-18 21:00:42 -05:00
Jose Diaz-Gonzalez
60acf68412 feat: use container name instead of container id for run:detached output
Closes #5170
2022-10-29 17:12:18 -04:00
Jose Diaz-Gonzalez
334e15fbb5 fix: do not attempt to start a container based on a non-release image
Closes #5065
2022-04-20 20:09:16 -04:00
Jose Diaz-Gonzalez
d9659b8cf2 fix: use array for arguments to container creation 2022-04-20 20:09:16 -04:00
Jose Diaz-Gonzalez
01b9f6f730 chore: drop commented out code 2022-04-20 20:09:16 -04:00
Jose Diaz-Gonzalez
53f7c89e46 fix: do not call procfile-get-command if there is no command specified 2022-04-20 20:09:16 -04:00
Jose Diaz-Gonzalez
a4be3a06f9 fix: properly quote arguments so that they preserve whitespace 2021-10-03 22:56:25 -04:00
Jose Diaz-Gonzalez
e636609fa8 fix: declare RUN_COMMAND after all other argument parsing has been performed
If it is declared sooner, the transformation of the command to the Procfile entry will be ignored.
2021-10-03 22:42:06 -04:00
Jose Diaz-Gonzalez
c266d8c41e chore: ignore shellcheck issues 2021-10-03 20:08:56 -04:00
Jose Diaz-Gonzalez
abfb0d3977 fix: do not require double quotes when issuing dokku run commands
This was broken in the #4736.
2021-10-03 19:46:42 -04:00
Jose Diaz-Gonzalez
775e78bd08 fix: disable some shellcheck rules 2021-08-12 21:15:15 -04:00
Jose Diaz-Gonzalez
a825e2678c fix: ensure env vars are injected for all run containers
CNB containers would otherwise not have them injected.
2021-08-12 21:12:01 -04:00
Jose Diaz-Gonzalez
e0453dbc15 refactor: use cron as the dyno type for one-off commands when running cron tasks 2021-07-27 02:58:45 -04:00
Jose Diaz-Gonzalez
f7ef14d737 feat: add initial scheduled task implementation
This functionality enables users to manage a global crontab for the Dokku user that contains all scheduled tasks across all apps. Alternative schedulers can implement cron tasks as desired.
2021-01-20 14:49:48 -05:00
Jose Diaz-Gonzalez
be26f45b5a fix: use correct plugin trigger 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
ebdf38e136 refactor: use procfile-get-command plugin trigger instead of direct ps function calls 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
236a279793 chore: add todos 2020-11-21 20:57:33 -05:00
Jose Diaz-Gonzalez
7357579af2 refactor: standardize trigger code 2020-02-10 02:40:59 -05:00
Jose Diaz-Gonzalez
9818cc6461 feat: implement container network attaching
Containers can be attached:

- after they are created, but before they are started
- after a successful deploy, but before the proxy reloads

This allows folks to have flexibility around when they would like a container to be made available to a network.
2020-02-08 19:55:29 -05:00
Jose Diaz-Gonzalez
4613efe191 refactor: docker-args-process rework trigger arguments
The IMAGE_TAG is not always available, while the IMAGE_SOURCE_TYPE is. Since the point of these triggers was to unify the argument passed and make it easier to interact with them, this version makes more sense.

Closes #3780
2020-02-01 16:18:13 -08:00
Michael Hobbs
972830a5f3 fix: respect DOKKU_APP_USER in is_image_herokuish_based 2019-11-19 15:07:29 -07:00
Salvatore Ferrucci
48ee225dbe disable interactive mode when container is detached 2019-10-21 13:48:21 +02:00
Salvatore Ferrucci
750a31013f scheduler-docker-local: start container with --interactive (+)
attach container's STDIN if it has tty
2019-10-19 12:08:52 +02:00
Jose Diaz-Gonzalez
360c587086 feat: add scheduler-post-run trigger
After a `dokku run` container is created and started, this plugin trigger will allow developers to run auxiliary commands in response to that container.
2019-10-14 04:55:07 -04:00
Jose Diaz-Gonzalez
798725bb54 feat: allow passing labels to one-off dokku containers
This feature is allows users to add extra label metadata to one-off containers. As this can interfere with Dokku internals if they shadow labels used by plugins, care should be taken to avoid the `com.dokku` or `org.label-schema` namespace.

Also proper name run containers so they don't get random names from docker...
2019-09-16 23:10:14 -04:00
Jose Diaz-Gonzalez
44fcea0ffa refactor: use new-style docker management commands
This PR uses the new syntax for commands introduced in Docker 1.13, making it a bit easier to understand just what a particular command is trying to do.

This also pushes the long-form syntax for docker command flags, which are also easier to understand at a glance.
2019-09-15 18:55:53 -04:00
Jose Diaz-Gonzalez
92d2895d99 feat: add container-type to run and deploy containers 2019-09-15 17:17:56 -04:00
Jose Diaz-Gonzalez
6836e56b24 refactor: add global docker build and run args
This reduces duplication and allows users to rely on global arguments to generate most labels needed.

The 'commit' command cannot have global arguments because the whitespace within the label change breaks string-based interpolation, and shell arrays cannot be exported.
2019-07-20 05:52:20 -04:00
Jose Diaz-Gonzalez
d1af10fc51 feat: add labels to all build, commit, create, and run docker calls
This will allow us to further filter containers and images by application when cleaning up containers.

Refs #3515
2019-07-19 15:45:43 -04:00
Jose Diaz-Gonzalez
785d9b4937 feat: allow setting DOCKER_BIN path for docker execution
This change allows operators to specify a DOCKER_BIN environment variable. This will specify a binary to run when executing docker, which is useful in cases where the 'docker' command being run must be modified in a way that would otherwise be invasive to Dokku, but minimalistic if done within a wrapper.
2019-05-29 00:46:19 -04:00
Jose Diaz-Gonzalez
b2a0b69ed5 Merge branch 'master' into feature-run-env 2019-05-19 23:20:34 -07:00
Jose Diaz-Gonzalez
a92687d3e8 fix: correct calls to fetch process-specific build and deploy args 2019-05-17 12:00:05 -04:00
Jose Diaz-Gonzalez
d30a948be0 feat: silence dokku run 'errors'
In certain cases, a command can be specified but found - or not - in the Procfile, resulting in unnecessary output for cron tasks.

Closes #3522
2019-05-12 05:15:53 -04:00
Alex Quick
dad5db4e9b [feature] add --env to dokku run
`dokku run [ --env KEY=VALUE | -e KEY=VALUE ] app command`

__note__ this changes the scheduler-run trigger to expect the following arguments:
scheduler_name, app_name, env_count, env_0, ..., env_n, app_arg_0, ..., app_arg_n

resolves: dokku/dokku#3291
2019-04-28 14:42:07 -04:00
Jose Diaz-Gonzalez
243d5ecc43 feat: integrate resource plugin with scheduler-docker-local 2019-04-08 11:31:34 -04:00