Home > docs > plugins v1 > Docker Support
Concord supports running Docker images within a process flow.
Short syntax:
flows:
  default:
    - docker: library/alpine
      cmd: echo '${greeting}'
configuration:
  arguments:
    greeting: "Hello, world!"
Using the task syntax:
flows:
  default:
    - task: docker
      in:
        image: library/alpine
        cmd: echo '${greeting}'
configuration:
  arguments:
    greeting: "Hello, world!"
The above invocations are equivalent to running
docker pull library/alpine && \
docker run -i --rm \
-v /path/to/process/workDir:/workspace \
library/alpine \
echo 'Hello, world!'
Parameters:
image - mandatory, string. Docker image to use;cmd - optional, string. Command to run. If not specified, the image’s
ENTRYPOINT is used;env - optional, environment variables;envFile - optional. Path to the file containing
environment variables;hosts - optional. Additional /etc/host entries;forcePull - optional, boolean. If true Concord runs
docker pull ${image} before starting the container. Default is true;debug - optional, boolean. If true Concord prints out additional
information into the log (the command line, parameters, etc);stdout and stderr - optional, string. Name of variables to
save the stdout and stderr of the container;pullRetryCount - optional, number. Number of retries if docker pull
fails. Default is 3;pullRetryInterval - optional, number. Delay in milliseconds between
docker pull retries. Default is 10000.Note: The current process’ working directory is mounted as /workspace.
Concord replaces the container’s WORKDIR with /workspace. Depending
on your setup, you may need to change to a different working directory:
- docker: library/alpine
  cmd: cd /usr/ && echo "I'm in $PWD"
To run multiple commands multiline YAML strings can be used:
- docker: library/alpine
  cmd: |
    echo "First command"
    echo "Second command"
    echo "Third command"
Concord automatically removes the container when the command is complete.
Additional environment variables can be specified using env parameter:
flows:
  default:
    - docker: library/alpine
      cmd: echo $GREETING
      env:
        GREETING: "Hello, ${name}!"
configuration:
  arguments:
    name: "concord"
Environment variables can contain expressions: all values will be converted to strings.
A file containing environment variables can be used by specifying
the envFile parameter:
flows:
  default:
    - docker: library/alpine
      cmd: echo $GREETING
      envFile: "myEnvFile"
The path must be relative to the process’ working directory ${workDir}.
It is an equivalent of running docker run --env-file=myEnvFile.
Additional /etc/hosts lines can be specified using hosts parameter:
flows:
  default:
  - docker: library/alpine
    cmd: echo '${greeting}'
    hosts:
      - foo:10.0.0.3
      - bar:10.7.3.21
configuration:
  arguments:
    greeting: "Hello, world!"
The stdout and stderr parameters can be used to capture the output of
commands running in the Docker container:
- docker: library/alpine
  cmd: echo "Hello, Concord!"
  stdout: myOut
- log: "Got the greeting: ${myOut.contains('Hello')}"
In the example above the output (stdout) of the command running in the
container is not printed out into the log, but instead saved as myOut
variable.
The stderr parameter can be used to capture the errors of commands running
in the Docker container:
- docker: library/alpine
  cmd: echo "Hello, ${name}" && (>&2 echo "STDERR WORKS")
  stderr: myErr
- log: "Errors: ${myErr}"
In the example above the errors (stderr) of the command running in the
container is not printed out into the log, but instead saved as myErr
variable.
Currently there’s only one requirement for custom Docker images: all images
must provide a standard POSIX shell as /bin/sh.
Running containers as root user is not supported - all user containers are
executed using the concord user equivalent to a run command like docker run
-u concord ... myImage.  The user is created automatically with UID 456.
As a result any operations in the docker container that require root access, such as installing packages, are not supported on Concord. If required, ensure that the relevant package installation and other tasks are performed as part of your initial container image build and published to the registry from which Concord retrieves the image.