slimtoolkit / slimtoolkit/slim
executable file not found in slimmed image
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 23.4k
- Forks
- 840
- PR merge metrics
- No merged PRs in 30d
Description
Hello
I use docker-slim on a Node image based on alpine, build from
https://github.com/talentsconnect/awayboard/issues/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".
$
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the reported docker-slim --debug build --http-probe --include-path /etc/passwd alpine_awayboard command and inspect whether the generated slim image can start its npm start command. The payload names no source files or tests; done means the executable is present and the slimmed container starts successfully.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker, go, node.js
- Domain
- devops, infrastructure
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100