无法重启容器,如何重启Docker容器?

Cannot restart container, how to restart Docker container?

当我打印列表时

docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
f15a180315d3        influxdb            "/entrypoint.sh infl…"   2 hours ago         Exited (128) 2 hours ago                       influxdb
7b753ba600df        influxdb            "/entrypoint.sh infl…"   3 hours ago         Exited (0) 2 hours ago                         nervous_fermi
2ddc5d9af400        influxdb            "/entrypoint.sh infl…"   3 hours ago         Exited (0) 3 hours ago                         nostalgic_varahamihira
2e174a82d38d        influxdb            "/entrypoint.sh infl…"   3 hours ago         Exited (0) 3 hours a                           modest_mestorf

但是如果我尝试重新启动

docker container restart influxdb

我明白了

Error response from daemon: Cannot restart container influxdb: driver failed programming external connectivity on endpoint influxdb (06ee4d738dffecd1a202840699a899286f4bbb88392e4eb227d65670108687a6): Error starting userland proxy: listen tcp 0.0.0.0:8086: bind: address already in use

netstat -nl -p tcp  | grep 8086
tcp6       0      0 :::8086                 :::*                    LISTEN      1985/influxd 

如何重启docker容器? 如果我去

docker kill influxdb
Error response from daemon: Cannot kill container: influxdb: Container f15a180315d38c2f5fac929b2d0b9be3e8ca2a09033648b5c5174c15a64c4d71 is not running

问题

如错误信息所示:

Error response from daemon: Cannot restart container influxdb: driver failed programming external connectivity on endpoint influxdb (06ee4d738dffecd1a202840699a899286f4bbb88392e4eb227d65670108687a6): Error starting userland proxy: listen tcp 0.0.0.0:8086: bind: address already in use

端口 8086 已被另一个进程阻塞(因此 address already in use 部分)。因此容器无法 运行,因为容器试图启动 influxdb,但由于已经绑定的端口而失败。 另外 netstat 的输出提供了提示,哪个进程占用了端口:

netstat -nl -p tcp  | grep 8086
tcp6       0      0 :::8086    :::*    LISTEN      1985/influxd 

(见最后部分:1985/influxd

解决方案

杀死其他进程(首先检查,如果进程忙,你应该在停止之前保存数据),例如使用 kill 命令:

kill 1985