Docker deploy_container sends literal None command when command is omitted
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 76/100
Piste de recherche
Commencez dans DockerContainerDriver.deploy_container() dans libcloud/container/drivers/docker.py, où command = shlex.split(str(command)) est exécuté avant la construction du payload de création. Exécutez le script de reproduction de l’issue pour confirmer que Cmd vaut ['None'] lorsque l’argument est omis. Le travail sera terminé lorsque l’omission de command ou le passage de None laissera Cmd hors de la requête, et que les chaînes explicites telles que 'echo "hello world"' seront toujours découpées en arguments.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
DockerContainerDriver.deploy_container() turns its default command=None into the literal command ['None'] in the container-create request. Omitting the argument therefore sends an explicit command override rather than leaving the image's default command alone.
The documented Docker example calls deploy_container('tomcat', image) without a command.
Detailed Information
Observed on unchanged trunk 8a0ef6260680625d54fce5093d2315e0926a7dc9, Libcloud 4.0.0.dev0, Python 3.12/Linux. This is a request-serialization reproduction using the actual driver method with API-version negotiation and response transport substituted. No Docker daemon/container was started.
import json
from types import SimpleNamespace
from unittest.mock import patch
from libcloud.container.drivers.docker import DockerContainerDriver
from libcloud.container.base import ContainerImage
with patch.object(DockerContainerDriver, '_get_api_version', return_value='1.24'):
driver = DockerContainerDriver()
image = ContainerImage('i', 'test-image', 'test-image', 'latest', driver)
for kwargs in ({}, {'command': None}, {'command': ''},
{'command': 'echo "hello world"'}):
requests = []
def request(action, **options):
requests.append((action, options))
body = {'Id': 'local-probe'} if action.endswith('/create') else {
'Id': 'local-probe', 'Name': '/local-probe',
'Image': 'test-image', 'Status': 'Created', 'Ports': []}
return SimpleNamespace(object=body)
driver.connection = SimpleNamespace(request=request, driver=driver)
driver.deploy_container('local-probe', image, start=False, **kwargs)
print(kwargs, json.loads(requests[0][1]['data'])['Cmd'])
Output:
{} ['None']
{'command': None} ['None']
{'command': ''} []
{'command': 'echo "hello world"'} ['echo', 'hello world']
The cause is command = shlex.split(str(command)) before building the payload. The optional absent value is converted to text before splitting. Expected: preserve the no-command-override case while retaining parsing of explicit command strings.
Docker's CMD documentation describes the image command as a default, overridden by supplied command arguments. This report establishes the incorrect outgoing Cmd, not a live-daemon startup error or full-suite result. No production code change yet.
AI assistance: ChatGPT helped investigate, reproduce, and draft this report.
- Langage dominant
- Python
- Étoiles
- 2.1k
- Forks
- 935
- Merge moyen
- 5 j 3 h
- PR mergées (30 j)
- 15
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de apache/libcloud
-
Difficulté 1/5 1-3 heures Accessibilité débutants 88/100
Les mainteneurs répondent en général sous 1 jour
-
Local range download leaves an output file after source-read failure despite delete_on_failure=TrueOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 15/100
apache/libcloud#2215 · 3 commentaires · 2 réactions ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 15/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de apache/libcloud
Issues similaires
-
Email validation accepts a trailing newlinePeut-être pris @marcello-pichini l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Contributing instructionsOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
dbt-labs/spark-utils#51 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 1 jour
-
bug frontend
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
vendrabuck/HERD#1419 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour