docker 容器端口格式看起来不正确(如 <port>-<port>)

docker container port format does not looks right(like <port>-<port>)

我正在申请docker

docker commit 之后,我命令 docker ps -a 它显示以下格式的端口

CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                      PORTS                                                               NAMES
fe593ddcd74f        test-container:0.1               "/usr/sbin/init"         3 minutes ago       Up 2 minutes                9800-9801/tcp, 9809/tcp                                             elegant_wozniak

澄清我的观点,9800-9801/tcp, 9809/tcp 部分看起来很奇怪。 根据我的经验,它应该类似于 9800/tcp, 9801/tcp, 9809/tcp.

我该如何解决这个问题? (或者至少,更改图像的 -p 选项?) 谢谢。

仅供参考,我搜索了 /var/lib/docker/containers/[containerID] 文件夹,但似乎没有错。以下是 grep 9800

的结果
{"StreamConfig":{},"State":{"Running":true,"Paused":false,"Restarting":false,"OOMKilled":false,"RemovalInProgress":false,"Dead":false,"Pid":237602,"ExitCode":0,"Error":"","StartedAt":"2017-04-26T04:52:09.543683449Z","FinishedAt":"0001-01-01T00:00:00Z","Health":null},"ID":"fe593ddcd74f53707af8341151c5be471145d5c6f72a2a06731e9c297beb490a","Created":"2017-04-26T04:52:07.968623795Z","Managed":false,"Path":"/usr/sbin/init","Args":[],"Config":{"Hostname":"fe593ddcd74f","Domainname":"","User":"","AttachStdin":false,"AttachStdout":true,"AttachStderr":true,"ExposedPorts":{"9800/tcp":{},"9801/tcp":{},"9809/tcp":{}},"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","JAVA_HOME=/etc/alternatives/java_sdk_1.8.0"],"Cmd":["/usr/sbin/init"],"ArgsEscaped":true,"Image":"test-container:0.1","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{"build-date":"20170406","license":"GPLv2","name":"CentOS Base Image","vendor":"CentOS"}},"Image":"sha256:9961609c375cbf4db292f34b4beab2db26e968f9cecec149049849cd9758ea9a","NetworkSettings":{"Bridge":"","SandboxID":"6ded0e0aaa4efdf7a094fd02329cd51f44bafdc5700b31453b490a38b3ee4c61","HairpinMode":false,"LinkLocalIPv6Address":"","LinkLocalIPv6PrefixLen":0,"Networks":{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"ca0bdc7bd4c80b9f31e722f2818072ef7710e8989b11f89fb4e39491511af0f1","EndpointID":"d273747e15b5648bda1728e8b9b57dbdb9a05aa3fa96a559d70e483432f7d455","Gateway":"172.17.0.1","IPAddress":"172.17.0.10","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:0a","IPAMOperational":false}},"Service":null,"Ports":{"9800/tcp":null,"9801/tcp":null,"9809/tcp":null},"SandboxKey":"/var/run/docker/netns/6ded0e0aaa4e","SecondaryIPAddresses":null,"SecondaryIPv6Addresses":null,"IsAnonymousEndpoint":true,"HasSwarmEndpoint":false},"LogPath":"/var/lib/docker/containers/fe593ddcd74f53707af8341151c5be471145d5c6f72a2a06731e9c297beb490a/fe593ddcd74f53707af8341151c5be471145d5c6f72a2a06731e9c297beb490a-json.log","Name":"/elegant_wozniak","Driver":"devicemapper","MountLabel":"","ProcessLabel":"","RestartCount":0,"HasBeenStartedBefore":true,"HasBeenManuallyStopped":false,"MountPoints":{},"SecretReferences":null,"AppArmorProfile":"","HostnamePath":"/var/lib/docker/containers/fe593ddcd74f53707af8341151c5be471145d5c6f72a2a06731e9c297beb490a/hostname","HostsPath":"/var/lib/docker/containers/fe593ddcd74f53707af8341151c5be471145d5c6f72a2a06731e9c297beb490a/hosts","ShmPath":"/var/lib/docker/containers/fe593ddcd74f53707af8341151c5be471145d5c6f72a2a06731e9c297beb490a/shm","ResolvConfPath":"/var/lib/docker/containers/fe593ddcd74f53707af8341151c5be471145d5c6f72a2a06731e9c297beb490a/resolv.conf","SeccompProfile":"","NoNewPrivileges":false}

this section of the docs for the docker ps命令所述:

'docker ps groups exposed ports into a single range if possible. E.g., a 
container that exposes TCP ports 100, 101, 102 displays 100-102/tcp in the 
PORTS column.'

无论如何,我发布这个的原因是当我从外部访问 9800 端口时。浏览器显示 connection refused。 在像 9800-9801 这样的更改显示之前,它有效。

这就是我绕过这个问题的方式。

  1. docker commit <current_container_name> <new_image_name>
  2. docker run -p 9800:9800 --name=<name you want> <new_image_name>.
  3. 现在您可以看到类似 0.0.0.0:9800->9800/tcp, 9801/tcp, 9809/tcp 的内容(不完全是因为我正在重新安装我的 docker)