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
Support inserting data into running containers #73
Comments
Back when I started the project, writing to a running container was really complicated/weird and since then noone really requested or seemed to need it, so I don't think there's any way to do it with docker-py in its current status. Might add it on the pile of things I want to do, but if you feel up to the challenge, I'd gladly accept a pull request that implements it! ;) |
👍 |
See #239 |
+1 |
+1 |
In docker 1.13.0, does the secret feature work as you expected ? |
This feature seems to have gone from working to not working again, the method outlined in this StackOverflow answer no longer works as the SocketIO object returned by attach_socket is not writeable. (The socket also only gives empty bytestrings as the output to |
Really quite frustrating for anyone trying to make any sort of interactive docker stuff. I've resorted to building my container like this: @qaurtApp.websocket("/image/run-interactive.sock")
@login_required
async def image_interactive_socket():
csrf_token=websocket.args.get('csrf_token')
validate_csrf(csrf_token)
image = docker_client.images.get(websocket.args.get("imageId"))
#Not a unix socket, actually an io.RawIoBase implementation
container = docker_client.containers.run(image, stdin_open = True, tty = True, auto_remove=True, detach=True)
_exitcode, socket = container.exec_run(websocket.args.get('command','/bin/sh'),socket=True,stdin=True, tty=True)
socket = socket._sock
socket.setblocking(0)
async def sending():
while True:
try:
data = socket.recv(4096)
await websocket.send(data)
except BlockingIOError: pass
await asyncio.sleep(0.05)
async def receiving():
while True:
data = await websocket.receive()
socket.send(data.encode("utf-8"))
producer = asyncio.create_task(sending())
consumer = asyncio.create_task(receiving())
try:
await asyncio.gather(producer, consumer)
except asyncio.CancelledError:
print("Shutting down interactive session")
container.stop() The main draw back is that there is no auto cleanup at all, which is really frustrating. It will work alright most of the time, but may have some unexpected results. I'd also much prefer to be able to keep the container running even after the user navigates away from it, and to be able to re-attach to an existing container. Overall this is pretty frustrating. |
Hi
I'm trying to replicate the following command using the docker-py api. I understand that the -a option is not supported. Do you have any suggestions for achieving the same result?
Thanks in advance!
The text was updated successfully, but these errors were encountered: