diff --git a/docs/reference/docker/README.md b/docs/reference/docker/README.md index 82724b27..a8babe26 100644 --- a/docs/reference/docker/README.md +++ b/docs/reference/docker/README.md @@ -90,10 +90,11 @@ Push a docker image to a remote registry ### docker.#Run Inputs -| Name | Type | Description | -| ------------- |:-------------: |:-------------: | -|*ref* | `string` |Image reference (e.g: nginx:alpine) | -|*run.env.IMAGE_REF* | `string` |- | +| Name | Type | Description | +| ------------- |:-------------: |:-------------: | +|*ref* | `string` |Image reference (e.g: nginx:alpine) | +|*recreate* | `*true \| bool` |Recreate container? | +|*run.env.IMAGE_REF* | `string` |- | ### docker.#Run Outputs diff --git a/stdlib/docker/docker.cue b/stdlib/docker/docker.cue index b2c9882b..1697f0c0 100644 --- a/stdlib/docker/docker.cue +++ b/stdlib/docker/docker.cue @@ -200,6 +200,9 @@ import ( // Container name name?: dagger.#Input & {string} + // Recreate container? + recreate: dagger.#Input & {bool | *true} + // Image registry registry?: { target: string @@ -216,6 +219,16 @@ import ( if [ ! -z "$CONTAINER_NAME" ]; then OPTS="$OPTS --name $CONTAINER_NAME" + docker inspect "$CONTAINER_NAME" >/dev/null && { + # Container already exists + if [ ! -z "$CONTAINER_RECREATE" ]; then + echo "Replacing container $CONTAINER_NAME" + docker stop "$CONTAINER_NAME" + docker rm "$CONTAINER_NAME" + else + echo "$CONTAINER_NAME already exists" + fi + } fi if [ ! -z "$CONTAINER_PORTS" ]; then @@ -240,6 +253,10 @@ import ( CONTAINER_NAME: name } + if recreate { + CONTAINER_RECREATE: "true" + } + if ports != _|_ { CONTAINER_PORTS: strings.Join(ports, " -p ") }