Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

executable file not found in slimmed image #48

Open
k3ck3c opened this issue Mar 24, 2018 · 6 comments
Open

executable file not found in slimmed image #48

k3ck3c opened this issue Mar 24, 2018 · 6 comments
Labels

Comments

@k3ck3c
Copy link

k3ck3c commented Mar 24, 2018

Hello

I use docker-slim on a Node image based on alpine, build from

talentsconnect/awayboard#11

$ ./docker-slim --debug build --http-probe --include-path /etc/passwd alpine_awayboard
docker-slim: [build] image=alpine_awayboard http-probe=true remove-file-artifacts=false image-overrides=map[] entrypoint=[] (false) cmd=[] (false) workdir='' env=[] expose=map[]
DEBU[0000] docker-slim: new Docker client (default) [6]
DEBU[0000] docker-slim: configured DOCKER_HOST env var
INFO[0000] docker-slim: inspecting 'fat' image metadata...
INFO[0000] docker-slim: [sha256:dc54f756109d2cde72e9a5f06c7644bdf4819a8d6dc125a9ace830f5d49afc39] 'fat' image size => 77209472 (77 MB)

INFO[0000] docker-slim: processing 'fat' image info...
DEBU[0000]

IMAGE HISTORY =>
[]docker.ImageHistory{docker.ImageHistory{ID:"sha256:dc54f756109d2cde72e9a5f06c7644bdf4819a8d6dc125a9ace830f5d49afc39", Tags:[]string{"alpine_awayboard:latest"}, Created:1521293682, CreatedBy:"/bin/sh -c #(nop) CMD ["npm" "start"]", Size:0, Comment:""}, docker.ImageHistory{ID:"sha256:914b47dcf32bfe65ccfd73486eb3e018b8dba983f6a1fa73891ee31ab716816b", Tags:[]string(nil), Created:1521293681, CreatedBy:"/bin/sh -c #(nop) EXPOSE 5711/tcp", Size:0, Comment:""}, docker.ImageHistory{ID:"sha256:62946f355bc54b2c0a40977284b45fdaaadc61b7e66cb0ceae8f9d8997a53899", Tags:[]string(nil), Created:1521293681, CreatedBy:"/bin/sh -c #(nop) ENV PORT=5711", Size:0, Comment:""}, docker.ImageHistory{ID:"sha256:092c2143af5138f03d32e30d6fdb6d924c75ccf8f34b876f677cf0083c3081a3", Tags:[]string(nil), Created:1521293681, CreatedBy:"/bin/sh -c npm install", Size:4863524, Comment:""}, docker.ImageHistory{ID:"sha256:69e20c5795d1d3ef4a4c3be2ed03943077b936235f505c7c46c98cde296943f1", Tags:[]string(nil), Created:1521293677, CreatedBy:"/bin/sh -c #(nop) COPY dir:cc37415dfb5d97db912bdb243ce3fe38853911b29d914ae212f974fe99b73448 in . ", Size:3847186, Comment:""}, docker.ImageHistory{ID:"sha256:f911e3390b39ea663623d0da6c0d1496f6532e885bd5cfa1dce0a5adf92b7533", Tags:[]string(nil), Created:1521293676, CreatedBy:"/bin/sh -c #(nop) WORKDIR /awayboard", Size:0, Comment:""}, docker.ImageHistory{ID:"sha256:ccbbe3a1d67c99c5660434defd266c684b9e6c13dcea3b9f37db68c3ecaa212f", Tags:[]string(nil), Created:1521293676, CreatedBy:"/bin/sh -c mkdir -p /awayboard/.data", Size:0, Comment:""}, docker.ImageHistory{ID:"sha256:ead7bbe50354410d04907ad1a7eccd0fdd7e7cf2d2316ddd7d610cf62565f798", Tags:[]string(nil), Created:1521293675, CreatedBy:"/bin/sh -c mkdir -p /awayboard", Size:0, Comment:""}, docker.ImageHistory{ID:"sha256:28aab417fa7f0f292d2d10da1b1ac3fe8570260476439507b2edd9df5515122e", Tags:[]string{"mhart/alpine-node:latest"}, Created:1520522569, CreatedBy:"/bin/sh -c apk add --no-cache curl make gcc g++ python linux-headers binutils-gold gnupg libstdc++ && for server in pgp.mit.edu keyserver.pgp.com ha.pool.sks-keyservers.net; do gpg --keyserver $server --recv-keys 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 FD3A5288F042B6850C66B31F09FE44734EB7990E 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 DD8F2338BAE7501E3DD5AC78C273792F7D83545D C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 B9AE9905FFD7803F25714661B63B535A4C206CA9 56730D5401028683275BD23C23EFEFE93C4CFFFE 77984A986EBC2AA786BC0F66B01FBB92821C587A && break; done && curl -sfSLO https://nodejs.org/dist/${VERSION}/node-${VERSION}.tar.xz && curl -sfSL https://nodejs.org/dist/${VERSION}/SHASUMS256.txt.asc | gpg --batch --decrypt | grep " node-${VERSION}.tar.xz\$" | sha256sum -c | grep ': OK$' && tar -xf node-${VERSION}.tar.xz && cd node-${VERSION} && ./configure --prefix=/usr ${CONFIG_FLAGS} && make -j$(getconf _NPROCESSORS_ONLN) && make install && cd / && if [ -z "$CONFIG_FLAGS" ]; then if [ -n "$NPM_VERSION" ]; then npm install -g npm@${NPM_VERSION}; fi; find /usr/lib/node_modules/npm -name test -o -name .bin -type d | xargs rm -rf; if [ -n "$YARN_VERSION" ]; then for server in pgp.mit.edu keyserver.pgp.com ha.pool.sks-keyservers.net; do gpg --keyserver $server --recv-keys 6A010C5166006599AA17F08146C2130DFD2497F5 && break; done && curl -sfSL -O https://yarnpkg.com/${YARN_VERSION}.tar.gz -O https://yarnpkg.com/${YARN_VERSION}.tar.gz.asc && gpg --batch --verify ${YARN_VERSION}.tar.gz.asc ${YARN_VERSION}.tar.gz && mkdir /usr/local/share/yarn && tar -xf ${YARN_VERSION}.tar.gz -C /usr/local/share/yarn --strip 1 && ln -s /usr/local/share/yarn/bin/yarn /usr/local/bin/ && ln -s /usr/local/share/yarn/bin/yarnpkg /usr/local/bin/ && rm ${YARN_VERSION}.tar.gz*; fi; fi && apk del curl make gcc g++ python linux-headers binutils-gold gnupg ${DEL_PKGS} && rm -rf ${RM_DIRS} /node-${VERSION}* /usr/share/man /tmp/* /var/cache/apk/* /root/.npm /root/.node-gyp /root/.gnupg /usr/lib/node_modules/npm/man /usr/lib/node_modules/npm/doc /usr/lib/node_modules/npm/html /usr/lib/node_modules/npm/scripts", Size:64350981, Comment:""}, docker.ImageHistory{ID:"", Tags:[]string(nil), Created:1520521209, CreatedBy:"/bin/sh -c #(nop) ENV VERSION=v9.8.0 NPM_VERSION=5 YARN_VERSION=latest", Size:0, Comment:""}, docker.ImageHistory{ID:"", Tags:[]string(nil), Created:1515532258, CreatedBy:"/bin/sh -c #(nop) CMD ["/bin/sh"]", Size:0, Comment:""}, docker.ImageHistory{ID:"", Tags:[]string(nil), Created:1515532258, CreatedBy:"/bin/sh -c #(nop) ADD file:093f0723fa46f6cdbd6f7bd146448bb70ecce54254c35701feeceb956414622f in / ", Size:4147781, Comment:""}}

DEBU[0000] IMAGE INSTRUCTIONS:
DEBU[0000] # new image
DEBU[0000] ADD file:093f0723fa46f6cdbd6f7bd146448bb70ecce54254c35701feeceb956414622f in /
DEBU[0000] CMD ["/bin/sh"]
DEBU[0000] ENV VERSION=v9.8.0 NPM_VERSION=5 YARN_VERSION=latest
DEBU[0000] RUN apk add --no-cache curl make gcc g++ python linux-headers binutils-gold gnupg libstdc++ &&
for server in pgp.mit.edu keyserver.pgp.com ha.pool.sks-keyservers.net; do gpg --keyserver $server --recv-keys 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 FD3A5288F042B6850C66B31F09FE44734EB7990E 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 DD8F2338BAE7501E3DD5AC78C273792F7D83545D C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 B9AE9905FFD7803F25714661B63B535A4C206CA9 56730D5401028683275BD23C23EFEFE93C4CFFFE 77984A986EBC2AA786BC0F66B01FBB92821C587A &&
break; done &&
curl -sfSLO https://nodejs.org/dist/${VERSION}/node-${VERSION}.tar.xz &&
curl -sfSL https://nodejs.org/dist/${VERSION}/SHASUMS256.txt.asc | gpg --batch --decrypt | grep " node-${VERSION}.tar.xz$" | sha256sum -c | grep ': OK$' &&
tar -xf node-${VERSION}.tar.xz &&
cd node-${VERSION} &&
./configure --prefix=/usr ${CONFIG_FLAGS} &&
make -j$(getconf _NPROCESSORS_ONLN) &&
make install &&
cd / &&
if [ -z "$CONFIG_FLAGS" ]; then if [ -n "$NPM_VERSION" ]; then npm install -g npm@${NPM_VERSION}; fi; find /usr/lib/node_modules/npm -name test -o -name .bin -type d | xargs rm -rf; if [ -n "$YARN_VERSION" ]; then for server in pgp.mit.edu keyserver.pgp.com ha.pool.sks-keyservers.net; do gpg --keyserver $server --recv-keys 6A010C5166006599AA17F08146C2130DFD2497F5 &&
break; done &&
curl -sfSL -O https://yarnpkg.com/${YARN_VERSION}.tar.gz -O https://yarnpkg.com/${YARN_VERSION}.tar.gz.asc &&
gpg --batch --verify ${YARN_VERSION}.tar.gz.asc ${YARN_VERSION}.tar.gz &&
mkdir /usr/local/share/yarn &&
tar -xf ${YARN_VERSION}.tar.gz -C /usr/local/share/yarn --strip 1 &&
ln -s /usr/local/share/yarn/bin/yarn /usr/local/bin/ &&
ln -s /usr/local/share/yarn/bin/yarnpkg /usr/local/bin/ &&
rm ${YARN_VERSION}.tar.gz*; fi; fi &&
apk del curl make gcc g++ python linux-headers binutils-gold gnupg ${DEL_PKGS} &&
rm -rf ${RM_DIRS} /node-${VERSION}* /usr/share/man /tmp/* /var/cache/apk/* /root/.npm /root/.node-gyp /root/.gnupg /usr/lib/node_modules/npm/man /usr/lib/node_modules/npm/doc /usr/lib/node_modules/npm/html /usr/lib/node_modules/npm/scripts
DEBU[0000] # end of image: mhart/alpine-node (id: sha256:28aab417fa7f0f292d2d10da1b1ac3fe8570260476439507b2edd9df5515122e tags: latest)
DEBU[0000]
DEBU[0000] # new image
DEBU[0000] RUN mkdir -p /awayboard
DEBU[0000] RUN mkdir -p /awayboard/.data
DEBU[0000] WORKDIR /awayboard
DEBU[0000] COPY dir:cc37415dfb5d97db912bdb243ce3fe38853911b29d914ae212f974fe99b73448 in .
DEBU[0000] RUN npm install
DEBU[0000] ENV PORT=5711
DEBU[0000] EXPOSE 5711/tcp
DEBU[0000] CMD ["npm" "start"]
DEBU[0000] # end of image: alpine_awayboard (id: sha256:dc54f756109d2cde72e9a5f06c7644bdf4819a8d6dc125a9ace830f5d49afc39 tags: latest)
DEBU[0000]
INFO[0000] docker-slim: starting instrumented 'fat' container...
INFO[0000] docker-slim: created container => 13223978ee386a71f6cb0eb79e460da14efb6e43ba5c5b852ad064efdf1d240c
DEBU[0000] container NetworkSettings.Ports => map[docker.Port][]docker.PortBinding{"5711/tcp":[]docker.PortBinding{docker.PortBinding{HostIP:"0.0.0.0", HostPort:"32775"}}, "65501/tcp":[]docker.PortBinding{docker.PortBinding{HostIP:"0.0.0.0", HostPort:"32774"}}, "65502/tcp":[]docker.PortBinding{docker.PortBinding{HostIP:"0.0.0.0", HostPort:"32773"}}}

DEBU[0000] cmdChannelAddr=tcp://127.0.0.1:32774 evtChannelAddr=tcp://127.0.0.1:32773

DEBU[0000] sendCmd(&{npm [start] [] [/etc/passwd]})

INFO[0000] docker-slim: watching container monitor...
docker-slim: press when you are done using the container...
INFO[0004] docker-slim: HTTP probe started...
INFO[0004] docker-slim: http probe - GET http://127.0.0.1:32775/ => 200

INFO[0004] docker-slim: HTTP probe done.

DEBU[0004] sendCmd(&{})

DEBU[0004] 'stop' response => 'ok'

INFO[0004] docker-slim: waiting for the container finish its work...
DEBU[0004] getEvt()
DEBU[0004] docker-slim: sensor event => 'monitor.finish.completed'

INFO[0004] docker-slim: shutting down 'fat' container...
INFO[0005] docker-slim: processing instrumented 'fat' container info...
INFO[0005] docker-slim: generating AppArmor profile...
DEBU[0005] docker-slim: saving seccomp profile to /home/gg/bbc/strip-docker-image/docker_slim/dist_linux/.images/dc54f756109d2cde72e9a5f06c7644bdf4819a8d6dc125a9ace830f5d49afc39/artifacts/alpine_awayboard-seccomp.json
INFO[0005] docker-slim: building 'slim' image...
Step 1/10 : FROM scratch
--->
Step 2/10 : COPY files /
---> 1b523135fc89
Removing intermediate container e565a5796d98
Step 3/10 : WORKDIR /awayboard
---> c4ce16be1017
Removing intermediate container 827c08660d3a
Step 4/10 : ENV PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
---> Running in 16e98efd22a1
---> 113e3c8c3357
Removing intermediate container 16e98efd22a1
Step 5/10 : ENV VERSION "v9.8.0"
---> Running in fa9b4e922cfe
---> 8ebafa6e8570
Removing intermediate container fa9b4e922cfe
Step 6/10 : ENV NPM_VERSION "5"
---> Running in 7cf1f4bc2c7b
---> 721ee7d60b02
Removing intermediate container 7cf1f4bc2c7b
Step 7/10 : ENV YARN_VERSION "latest"
---> Running in dd7ac2b173aa
---> a87362d825c5
Removing intermediate container dd7ac2b173aa
Step 8/10 : ENV PORT "5711"
---> Running in f2181484482b
---> a15cb9c7236c
Removing intermediate container f2181484482b
Step 9/10 : EXPOSE 5711/tcp
---> Running in c4928ea5c11e
---> b9edbe08550e
Removing intermediate container c4928ea5c11e
Step 10/10 : CMD npm start
---> Running in d749177f90c9
---> b6d53ab1375c
Removing intermediate container d749177f90c9
Successfully built b6d53ab1375c
Successfully tagged alpine_awayboard.slim:latest
INFO[0007] docker-slim: created new image: alpine_awayboard.slim

The size of the slimmed image is too small

$ docker images | grep awayboard
alpine_awayboard.slim latest b6d53ab1375c 34 seconds ago 1.22kB
alpine_awayboard latest dc54f756109d 7 days ago 77.2MB
awayboard latest 2119b7990eac 7 days ago 682MB

A
docker run
fails

$ docker run -p 5711:5711 alpine_awayboard.slim
container_linux.go:262: starting container process caused "exec: "npm": executable file not found in $PATH"
docker: Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused "exec: "npm": executable file not found in $PATH".
$

@kcq
Copy link
Member

kcq commented Apr 1, 2018

Thank you for reporting the problem! I'll try to repro the condition with the awayboard Docker image (very helpful!).

@akbhat
Copy link

akbhat commented Dec 1, 2018

Any updates on this bug report? I ran into a similar issue with Terraform executable inside Alpine container that seems to have been stripped in the slimming process. The slim container size was below 1.5M and while it works terraform, ansible, etc seem to also have been stripped from the original image.

@kcq
Copy link
Member

kcq commented Dec 31, 2018

@akbhat are you trying to minify the official Terraform image from https://hub.docker.com/r/hashicorp/terraform/ ?

@akbhat
Copy link

akbhat commented Dec 31, 2018

@kcg I tested with a custom container based on alpine:3.8 which curls the Terraform executable alongwith some other software such as Ansible ,etc. I can share the Dockerfile if needed

@akbhat
Copy link

akbhat commented Jan 28, 2019

@kcq Did you get a chance to look at this? Any idea what maybe going on?

@kcq kcq added the triage label Feb 21, 2019
@choutos
Copy link
Contributor

choutos commented Nov 22, 2021

Any update on this? I ran into the same issue with an image containing Ansible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants