slimtoolkit / slimtoolkit/slim

docker slim fails with "write unix @->/run/docker.sock: write: broken pip"

Open
#380 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

triage
Dominant language
Go
Stars
23.4k
Forks
841
PR merge metrics
No merged PRs in 30d

Description

I am trying to slim a docker image that runs a simple python script.

Expected Behavior

Sucessfully makes a image that is slimmer or the same size as the image it is working on


Actual Behavior

Errs with

cmd=build info=build.error status='optimized.image.build.error' error='write unix @->/run/docker.sock: write: broken pipe' 
cmd=build state=exited code=33554435 version=linux|Transformer|1.37.5|86fbd29ab3549fa564e87e4770178480cb0542d3|2022-03-21_06:10:20AM location=/usr/local/bin

Steps to Reproduce the Problem

I am trying to slim a docker image that runs a simple python script.
A simple reproducible example.
A Dockerfile with

FROM python:3.9-slim
RUN echo "print('Hello World!')" > ./main.py
CMD ["python", "main.py"]

and a bash script (make_slim.sh) to build the image and make sure it runs and slim the image:

sudo docker run $(sudo docker build -q ./)
echo "$(sudo docker build -q ./)"
sudo docker-slim build --target $(sudo docker build -q ./) --http-probe=false --exec "python main.py"

run bash script:

bash make_slim.sh

The full output is:

Hello World!
sha256:7d673146def32d263aa89ece6b351fee67cf7f251c659dd56953ba9b609ab663
docker-slim: message='join the Gitter channel to ask questions or to share your feedback' info='https://gitter.im/docker-slim/community'
docker-slim: message='join the Discord server to ask questions or to share your feedback' info='https://discord.gg/9tDyxYS'
docker-slim: message='Github discussions' info='https://github.com/docker-slim/docker-slim/discussions'
cmd=build info=exec message='changing continue-after from probe to nothing because http-probe is disabled' 
cmd=build info=exec message='updating continue-after mode to exec' 
cmd=build state=started
cmd=build info=params target.type='image' target='sha256:7d673146def32d263aa89ece6b351fee67cf7f251c659dd56953ba9b609ab663' continue.mode='exec' rt.as.user='true' keep.perms='true' tags='' 
cmd=build state=image.inspection.start
cmd=build info=image id='sha256:7d673146def32d263aa89ece6b351fee67cf7f251c659dd56953ba9b609ab663' size.bytes='124714527' size.human='125 MB' 
cmd=build info=image.stack index='0' name='python:3.9-slim' id='sha256:5da6ce3c33c6783782eece610be5c83a34001d6cd1d66ea32381afac543f366b' 
cmd=build info=image.stack name='' id='sha256:7d673146def32d263aa89ece6b351fee67cf7f251c659dd56953ba9b609ab663' index='1' 
cmd=build state=image.inspection.done
cmd=build state=container.inspection.start
cmd=build info=container status='created' name='dockerslimk_4807_20220828154425' id='5fed5015471129f2c55979223e838608272f4f4bc871fb02b5082122f411c520' 
cmd=build info=container status='running' name='dockerslimk_4807_20220828154425' id='5fed5015471129f2c55979223e838608272f4f4bc871fb02b5082122f411c520' 
cmd=build info=container message='obtained IP address' ip='172.17.0.2' 
time="2022-08-28T16:44:26+01:00" level=error msg="channel.Client.Read: read error (read tcp 127.0.0.1:57958->127.0.0.1:49154: read: connection reset by peer), exiting..."
time="2022-08-28T16:44:26+01:00" level=error msg="channel.NewCommandClient: channel verify error = read tcp 127.0.0.1:57958->127.0.0.1:49154: read: connection reset by peer"
cmd=build info=cmd.startmonitor status='sent' 
cmd=build info=event.startmonitor.done status='received' 
cmd=build info=container name='dockerslimk_4807_20220828154425' id='5fed5015471129f2c55979223e838608272f4f4bc871fb02b5082122f411c520' target.port.list='' target.port.info='' message='YOU CAN USE THESE PORTS TO INTERACT WITH THE CONTAINER' 
cmd=build info=continue.after mode='exec' message='provide the expected input to allow the container inspector to continue its execution' 
cmd=build info=continue.after shell='python main.py' mode='exec' 
docker-slim[build][exec]: output: Hello World!
cmd=build info=continue.after mode='exec' exitcode='0' 
cmd=build state=container.inspection.finishing
cmd=build state=container.inspection.artifact.processing
cmd=build state=container.inspection.done
cmd=build state=building message="building optimized image" 
cmd=build log='optimized.image.build' event=LOG.START tag='<none>.slim'  ====================

cmd=build log='optimized.image.build' event=LOG.END tag='<none>.slim'  ====================
cmd=build info=build.error status='optimized.image.build.error' error='write unix @->/run/docker.sock: write: broken pipe' 
cmd=build state=exited code=33554435 version=linux|Transformer|1.37.5|86fbd29ab3549fa564e87e4770178480cb0542d3|2022-03-21_06:10:20AM location=/usr/local/bin 
cmd=build info=container.inspector.cleanup name='dockerslimk_4807_20220828154425' id='5fed5015471129f2c55979223e838608272f4f4bc871fb02b5082122f411c520' 
cmd=build state=container.target.shutdown.start
cmd=build info=container.inspector message='already finished monitoring' 
cmd=build state=container.target.shutdown.done
cmd=build info=report file='slim.report.json' 
docker-slim: message='join the Gitter channel to ask questions or to share your feedback' info='https://gitter.im/docker-slim/community'
docker-slim: message='join the Discord server to ask questions or to share your feedback' info='https://discord.gg/9tDyxYS'
docker-slim: message='Github discussions' info='https://github.com/docker-slim/docker-slim/discussions'

From the log, it seems that the --http-probe=false and --exec are working correctly, and the python script runs fine. So I'm confused what could be causing such a simple example to fail.


Specifications

OS:

  • Version: 22.04.1 LTS
  • Platform: Ubuntu

Docker:

  • Version: Docker version 20.10.17, build 100c701

Docker-slim:

  • Version: docker-slim version linux|Transformer|1.37.5|86fbd29ab3549fa564e87e4770178480cb0542d3|2022-03-21_06:10:20AM

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure with the provided Dockerfile and make_slim.sh, using Docker 20.10.17 and docker-slim 1.37.5. Start with the optimized image build step and the reported Docker socket errors; done means the example completes successfully and produces a slim image without the broken-pipe failure.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, python
Domain
devops, infrastructure
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.