Cannot run bash within docker:dind
I would like to prepare a gitlab-ci-runner for running Android CI and CD pipeline. To do so I prepare a Docker container with Android SDK but all my gradle scripts were failed with:
$ ./gradlew properties
env: can't execute 'bash': No such file or directory
During my investigation I found out, that it is an issue with cannot run some commands, because they are not available. This is more weird, 'cause when I am running this image on my local computer, everything works.
So I prepared a simple Dockerfile to do a quicker tests:
FROM ubuntu:16.04
RUN apt-get -qq update && \
apt-get install -qqy --no-install-recommends \
curl \
git \
html2text \
openjdk-8-jdk \
libc6-i386 \
lib32stdc++6 \
lib32gcc1 \
lib32ncurses5 \
lib32z1 \
unzip \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN ln -s /bin/bash /usr/local/bin/bash
WORKDIR /home/workdir
VOLUME ["/home/workdir"]
CMD ["/bin/bash"]
as well as simplified .gitlab-ci.yml - using docker:dind due to the fact that my Docker image is stored in my private Docker Gitlab registry:
image: docker:latest
services:
- docker:dind
stages:
- check
# - build
# - test
# - deploy
variables:
CONTAINER_RELEASE_IMAGE: registry.gitlab.com/xxxxxxx/gitlab-android-runner:small
before_script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
- docker pull $CONTAINER_RELEASE_IMAGE
- docker run --name gitlab-android-runner -d -i -v $PWD:/home/workdir $CONTAINER_RELEASE_IMAGE
- docker exec -i gitlab-android-runner bash
after_script:
- docker rm -f -v gitlab-android-runner
check:
stage: check
script:
- env
- echo $PATH
- ls /bin
- whereis env
- ls -al /usr/bin/env
- whereis bash
- ls -al /bin/bash
- /usr/bin/env ls
environment: check
but also this configuration leads to error:
Running with gitlab-ci-multi-runner 1.6.0 (01b3ea1)
WARNING: environment is not supported by selected executor and shell
Using Docker executor with image docker:latest ...
Pulling docker image docker:dind ...
Starting service docker:dind ...
Waiting for services to be up and running...
Pulling docker image docker:latest ...
Running on runner-xxx
Cloning repository...
Cloning into '/builds/xxx/xxxx...
Checking out xxxx as xxx...
$ docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
Login Succeeded
$ docker pull $CONTAINER_RELEASE_IMAGE
small: Pulling from xxxx/gitlab-android-runner
xxxxxx: Pulling fs layer
[...]
xxxxxx: Pull complete
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for registry.gitlab.com/xxxx/gitlab-android-runner:small
$ docker run --name gitlab-android-runner -d -i -v $PWD:/home/workdir $CONTAINER_RELEASE_IMAGE
920d62c251de911dd41ebb28342fe5306db832c3a8886f155ea43f02299dc155
$ docker exec -i gitlab-android-runner bash
$ env
[...]
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[]...
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$ ls /bin
ash
base64
bbconfig
busybox
cat
catv
chgrp
chmod
chown
conspy
cp
cpio
date
[...]
ps
pwd
reformime
rev
rm
rmdir
run-parts
sed
setserial
sh
sleep
stat
stty
su
sync
tar
touch
true
umount
uname
usleep
watch
zcat
$ whereis env
/bin/sh: eval: line 56: whereis: not found
Running after script...
$ docker rm -f -v gitlab-android-runner
gitlab-android-runner
ERROR: Build failed: exit code 127
So I cannot run neither bash nor even whereis command.
Any ideas?