Ich verwende Docker Remote Api und Python-Anfragen v2.2.1, um eine Exec-Anweisung auszuführen. Dies ist der Code, den ich verwende:Fehler 500 beim Ausführen von Exec starten mit Docker Remote API
import requests
import json
containerName = 'my_container_name'
startContainerRequest = requests.post('http://127.0.0.1:4243/containers/' + containerName + '/start')
print startContainerRequest.status_code #result: 204
payload = {'Cmd':["date"]}
headers = {'Content-type': 'application/json'}
execCreateRequest = requests.post('http://127.0.0.1:4243/containers/' + containerName + '/exec', data=json.dumps(payload), headers=headers)
print execCreateRequest.status_code #result: 201
execStartRequest = requests.post('http://127.0.0.1:4243/exec/' + execCreateRequest.json()['Id'] + '/start', headers=headers)
print execStartRequest.status_code #result: 500
print execStartRequest.text #EOF
Die letzte REST-Anfrage schlägt fehl. Exec inspect funktioniert mit der gleichen ID, so ist die ID nicht das Problem. Das Verwenden eines anderen Befehls als das Datum in der Nutzlast schlägt ebenfalls fehl. Ich habe es mit verschiedenen Containern versucht, aber die gleichen Ergebnisse erzielt. docker exec my_container_name date
vom Terminal funktioniert.
Hier sind meine DOCKER_OPTS von/etc/default/Docker:
DOCKER_OPTS="--dns *privateDNS* --dns 8.8.8.8 -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock"
Hat ein JSON-Körper auf die '/ Starten' Hilfe hinzufügen? – Matt
Ja, das hat den Trick gemacht. Soll es so funktionieren, oder ist das ein Bug in der Ruhe api? Fühlen Sie sich frei, um Ihren Kommentar in eine Antwort zu konvertieren, ich würde akzeptieren und upvote – Jakob
Nicht sicher, vielleicht ein Problem auf GitHub zu überprüfen. Einige JSON-APIs benötigen mindestens '{}', damit sie als JSON analysiert werden. – Matt