Docker Remote API 1.17 容器创建后,通过docker ps -a 无法看到指定的开放端口;启动正常但马上退出


版本
192.168.59.103为client,Docker版本为1.5.0。
192.168.1.171为docker daemon server,Docker版本为1.6.0。
Remote Api  为V1.17。

Registry 使用的是官方提供的镜像,提供服务的地址为 http://192.168.1.171:5000

现象

通过如下参数创建了容器,本意是想放开22端口,通过docker start 启动,然后通过docker exec -it进入容器,现在的问题是:
1. 通过POST /containers/create创建正常,但是通过docker ps -a 查看时,Ports并未标识有打开容器22端口, 如下:
➜  /Users/xg/go/src/gaas git:(master) ✗ >docker ps -a
CONTAINER ID        IMAGE                                       COMMAND                CREATED             STATUS              PORTS                                                                         NAMES
b3cd38c7210b        192.168.1.171:5000/library/gp:20140801   "/usr/sbin/sshd -D /   9 seconds ago 

2. docker start 启动正常,但是马上就退出了,导致无法进行docker exec -it进行登录。

请有经验的同学帮忙分析下,谢谢了。

附:创建参数
{"Image":"192.168.1.171:5000/library/gp:20140801",
"Hostname":"",
"Domainname":"",
"User":"",
"Memory":268435456,
"MemorySwap":0,
"CpuShares":1,
"Cpuset":"",
"AttachStdin":true,
"AttachStdout":true,
"AttachStderr":true,
"PortSpecs":null,
"ExposedPorts":{"22/tcp":{}},
"Tty":false,
"OpenStdin":false,
"StdinOnce":false,
"Env":null,
"Cmd":["/bin/sh","-c"],
"Volumes":{},
"WorkingDir":"",
"Entrypoint":["/usr/sbin/sshd","-D"],
"NetworkDisabled":false,
"OnBuild":null,
"HostConfig":{"Binds":[],"ContainerIDFile":"","LxcConf":null,"Privileged":true,"PortBindings":{"22/tcp":[{"HostIp":"0.0.0.0","HostPort":"40022"}]},
"Links":[],
"PublishAllPorts":false,
"Dns":null,
"DnsSearch":null,
"VolumesFrom":null,
"NetworkMode":"bridge",
"RestartPolicy":{"Name":"no","MaximumRetryCount":0
已邀请:

shlallen - DaoCloud软件工程师,合伙人

赞同来自:


如果您去查看容器启动日志的话,肯定会发现sshd的参数有误,应该会是Extra argument /bin/sh。

对于您的容器而言,启动命令是entrypoint+cmd,也就是/usr/sbin/sshd -D /bin/sh -c,此时/bin/sh -c也作为sshd的参数被传了进来,导致出问题。

如果您不指定cmd的话,就没有问题了。
直接执行命令docker run -d -p a:b image
使用docker remote API的时候,也不要指定cmd

要回复问题请先登录注册