s6 overlay, docker exec, and PATH - blitterated/docker-dev-env-s6 GitHub Wiki
Does s6-overlay version 3 break docker exec
? Is this intentional? Or is this just Operator Error on my part?
Here's a basic Ubuntu with s6-overlay version 3.
cat <<"EOF" > Dockerfile
FROM ubuntu
RUN apt update && apt --yes upgrade && \
apt install --yes tar xz-utils
ARG S6_OVERLAY_VERSION=3.0.0.2
ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch-${S6_OVERLAY_VERSION}.tar.xz /tmp
RUN tar -C / -Jxpf /tmp/s6-overlay-noarch-${S6_OVERLAY_VERSION}.tar.xz
ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-x86_64-${S6_OVERLAY_VERSION}.tar.xz /tmp
RUN tar -C / -Jxpf /tmp/s6-overlay-x86_64-${S6_OVERLAY_VERSION}.tar.xz
ENTRYPOINT ["/init"]
EOF
Build an image.
docker build -t s6o_v3 .
Run a container and check env
docker run --rm s6o_v3 env
Here we can see that /command
is in PATH
.
...
PATH=/command:/usr/bin:/bin
PWD=/
...
Run a container, but this time use with-contenv env
.
docker run --rm s6o_v3 with-contenv env
The results are essentially the same as experiment #3.1.
...
PATH=/command:/usr/bin:/bin
PWD=/
HOME=/root
HOSTNAME=f65fd42dd081
...
CID=$(docker run -d s6o_v3)
Run env
in the daemon container via docker exec
.
docker exec $CID env
What happend to having /command
in PATH
?
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=8d99e9086565
HOME=/root
Similar to Experiment #3.2, run env
via with-contenv
in the daemon container.
docker exec $CID with-contenv env
This fails because /command
is not in PATH
.
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "with-contenv": executable file not found in $PATH: unknown
Use fully qualified path to with-contenv
.
docker exec $CID /command/with-contenv env
It still fails. Looks like with-contenv
needs /command
in PATH
.
execlineb: fatal: unable to exec ifelse: No such file or directory
Force a path like the one in Experiment #3.2.
docker exec -e 'PATH=/command:/usr/bin:/bin' $CID with-contenv env
We get the same basic result as Experiment #3.2.
PATH=/command:/usr/bin:/bin
PWD=/
HOME=/root
HOSTNAME=8d99e9086565
docker stop $CID
Here's a basic Ubuntu with s6-overlay version 3.
cat <<"EOF" > Dockerfile
FROM ubuntu
ADD https://github.com/just-containers/s6-overlay/releases/download/v2.2.0.3/s6-overlay-amd64-installer /tmp/
RUN chmod +x /tmp/s6-overlay-amd64-installer && \
/tmp/s6-overlay-amd64-installer /
ENTRYPOINT ["/init"]
EOF
Build an image.
docker build -t s6o_v2 .
Run a container and check env
docker run --rm s6o_v2 env
Here we can see that /command
is in PATH
.
...
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOME=/root
CWD=/
HOSTNAME=ea42a20e7f76
S6_LOGGING=0
...
Run a container, but this time use with-contenv env
.
docker run --rm s6o_v2 with-contenv env
The results are essentially the same as experiment #2.1.
...
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOME=/root
CWD=/
HOSTNAME=520c0b8d90f8
...
CID=$(docker run -d s6o_v2)
Run env
in the daemon container via docker exec
.
docker exec $CID env
Looks OK, we still have /usr/bin
.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=bd27f17eb25a
HOME=/root
Similar to Experiment #2.2, run env
via with-contenv
in the daemon container.
docker exec $CID with-contenv env
Still getting a successful result.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOME=/root
CWD=/
HOSTNAME=bd27f17eb25a
docker stop $CID