kill + start docker image

时间:2017-09-21 04:17:33

标签: python linux docker networking tcp

背景

我在同一台机器上的docker中运行了多个python应用程序。每个python应用程序使用twisted创建服务器和客户端以在TCP中进行通信,每个进程侦听的端口都在静态文件中配置。

问题

有时候,只有一些,当我重新启动一个或多个docker镜像时(我使用docker killdocker run),有一个应用程序在被杀之前使用的端口仍有可能被使用。

docker run命令之后,twisted会抛出Unhandled error in Deferred:错误(没有更多细节,只有这一行,可能是因为我的日志配置),当且仅当它是一个有问题的一个

然后我使用netstat -ntlp来检查特定端口,我发现端口没有被监听。我尝试nc -l [PORT],然后返回Address already in use。另外,我使用netstat -a | grep ESTABLISHED来查找某些进程已经/已经建立了与该端口的TCP连接。

意味着我试图暂时解决此问题

  1. 我多次重启有问题的泊坞窗图像,直到它听到端口。
  2. 我杀死了之前与有问题的泊坞窗图像通信的其他泊坞窗图像,然后重新启动了所有已杀死的图像。
  3. 预期

    我想知道为什么会出现这种情况以及如何解决这个问题。每次重新启动docker镜像时,我都不想检查netstat -ntlp

    环境

    操作系统:Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-53-generic x86_64)

    泊坞:

    Client:
     Version:      1.13.1
     API version:  1.26
     Go version:   go1.7.5
     Git commit:   092cba3
     Built:        Wed Feb  8 06:42:29 2017
     OS/Arch:      linux/amd64
    
    Server:
     Version:      1.13.1
     API version:  1.26 (minimum version 1.12)
     Go version:   go1.7.5
     Git commit:   092cba3
     Built:        Wed Feb  8 06:42:29 2017
     OS/Arch:      linux/amd64
     Experimental: false
    

    Python:Python 2.7.6 扭曲:17.1.0

1 个答案:

答案 0 :(得分:0)

首先显而易见的是,您是否尝试了以下内容,

docker restart <container name>

如果它不起作用,请尝试遵循,作为最后的手段。

docker kill --signal=SIGKILL <container name>