Open lethe3000 opened 4 years ago
@lethe3000 thank you for the code samples! it'll help with the repro! In the meantime, can you try something to see if it makes a difference... Do you mind specifying a custom http probe to hit the swagger endpoint that gets exposed with the swagger blueprint you have there? Your call should look something like this: docker-slim build --http-probe-cmd / --http-probe-cmd /swagger server
You can find more info about the HTTP probes here: https://github.com/docker-slim/docker-slim#http-probe-commands
P.S.
I noticed you have a dot at the end of the docker-slim build
command. What are your expectations/intentions there?
I noticed you have a dot at the end of the docker-slim build command. What are your expectations/intentions there?
extra dot is a typo, please dismiss, I'm trying add http probe..
I've modify main.py
, added a simple router will return {"hello":"world"}
when access /, and build slim and run.
as a result, container now can launch success and access to / can get expected response.
but access to /swagger/ page render failed because of static file 404 error.
main.py
from sanic import Sanic
from sanic_openapi import swagger_blueprint
from sanic.response import json
app = Sanic()
app.blueprint(swagger_blueprint)
@app.route("/")
async def test(request):
return json({"hello": "world"})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)
build commands:
$ docker build -t server .
$ docker-slim build --http-probe-cmd / --http-probe-cmd /swagger server
$ docker run -d -p 8000:8000 server.slim
docker-slim logs
docker-slim[build]: info=http.probe message='using default probe'
docker-slim[build]: state=started
docker-slim[build]: info=params target=server continue.mode=probe
docker-slim[build]: state=image.inspection.start
docker-slim[build]: info=image id=sha256:d8969971141e45f473889ab87f57dd68acaf92ec5df8a7c27c94d8b7d00b047b size.bytes=967401912 size.human=967 MB
docker-slim[build]: info=image.stack index=0 name='python:3.7' id='sha256:fbf9f709ca9f5d96dec78cc074963bc44f0497bb73792bf2cd1cb40072ad0f8f'
docker-slim[build]: info=image.stack index=1 name='server:latest' id='sha256:d8969971141e45f473889ab87f57dd68acaf92ec5df8a7c27c94d8b7d00b047b'
docker-slim[build]: info=image.exposed_ports list='8000'
docker-slim[build]: state=image.inspection.done
docker-slim[build]: state=container.inspection.start
docker-slim[build]: info=container status=created name=dockerslimk_12224_20191213145535 id=e3738ea32225295356c81aa41138aeb4d6351c72210442dcf94e219389c95837
docker-slim[build]: info=cmd.startmonitor status=sent
docker-slim[build]: info=event.startmonitor.done status=received
docker-slim[build]: info=container name=dockerslimk_12224_20191213145535 id=e3738ea32225295356c81aa41138aeb4d6351c72210442dcf94e219389c95837 target.port.list=[32776] target.port.info=[8000/tcp => 0.0.0.0:32776] message='YOU CAN USE THESE PORTS TO INTERACT WITH THE CONTAINER'
docker-slim[build]: state=http.probe.starting message='WAIT FOR HTTP PROBE TO FINISH'
docker-slim[build]: info=continue.after mode=probe message='no input required, execution will resume when HTTP probing is completed'
docker-slim[build]: info=prompt message='waiting for the HTTP probe to finish'
docker-slim[build]: state=http.probe.running
docker-slim[build]: info=http.probe.ports count=1 targets='32776'
docker-slim[build]: info=http.probe.commands count=3 commands='GET /,GET /swagger,GET /,...'
docker-slim[build]: info=http.probe.call status=200 method=GET target=http://127.0.0.1:32776/ attempt=1 time=2019-12-13T14:55:48Z
docker-slim[build]: info=http.probe.call status=200 method=GET target=http://127.0.0.1:32776/swagger attempt=1 time=2019-12-13T14:55:48Z
docker-slim[build]: info=http.probe.call status=200 method=GET target=http://127.0.0.1:32776/ attempt=1 time=2019-12-13T14:55:48Z
docker-slim[build]: info=http.probe.summary total=3 failures=0 successful=3
docker-slim[build]: state=http.probe.done
docker-slim[build]: info=event message='HTTP probe is done'
docker-slim[build]: state=container.inspection.finishing
docker-slim[build]: state=container.inspection.artifact.processing
docker-slim[build]: state=container.inspection.done
docker-slim[build]: state=building message='building minified image'
docker-slim[build]: state=completed
docker-slim[build]: info=results status='MINIFIED BY 17.43X [967401912 (967 MB) => 55511032 (56 MB)]'
docker-slim[build]: info=results image.name=server.slim image.size='56 MB' data=true
docker-slim[build]: info=results artifacts.location='/tmp/docker-slim-state/.docker-slim-state/images/d8969971141e45f473889ab87f57dd68acaf92ec5df8a7c27c94d8b7d00b047b/artifacts'
docker-slim[build]: info=results artifacts.report=creport.json
docker-slim[build]: info=results artifacts.dockerfile.original=Dockerfile.fat
docker-slim[build]: info=results artifacts.dockerfile.new=Dockerfile
docker-slim[build]: info=results artifacts.seccomp=server-seccomp.json
docker-slim[build]: info=results artifacts.apparmor=server-apparmor-profile
docker-slim[build]: state=done
docker-slim[build]: info=report file='slim.report.json'
hello, I'm having the same problem when the image is minified with docker-slim? Are there any news on this point? Thanks
I have a simple sanic server, it runs ok with normal docker, but failed to launch when slimed.
and container exit with error
code as below, include
main.py
,Dockerfile
andrequirements.txt
Dockerfile
main.py
requirements.txt
Note that if I commented out line
app.blueprint(swagger_blueprint)
, slim container can launch success