无法在Docker中中断Netcat(nc/ncat)

无法在Docker中中断Netcat(nc/ncat),docker,docker-compose,netcat,Docker,Docker Compose,Netcat,我有一个服务,它执行一些任务,然后打开一个端口,以便其他服务知道它已完成。我使用nc来实现这一点:nc-l-k-p1337。我使用docker compose来管理服务 关闭服务时,运行nc的服务总是需要几秒钟才能关闭,而它应该是即时的。我认为这个过程不会中断,docker必须终止它。如果我通过docker compose run在同一服务上运行nc,我不能通过Ctrl+C中断该过程 在本地运行nc时,可通过Ctrl+C立即终止 如何创建运行可中断的服务 Dockerfile FROM ruby

我有一个服务,它执行一些任务,然后打开一个端口,以便其他服务知道它已完成。我使用
nc
来实现这一点:
nc-l-k-p1337
。我使用
docker compose
来管理服务

关闭服务时,运行
nc
的服务总是需要几秒钟才能关闭,而它应该是即时的。我认为这个过程不会中断,docker必须终止它。如果我通过
docker compose run在同一服务上运行
nc
,我不能通过Ctrl+C中断该过程

在本地运行
nc
时,可通过Ctrl+C立即终止

如何创建运行可中断的服务

Dockerfile

FROM ruby:2.6.3-alpine

RUN apk add --no-cache netcat-openbsd

COPY entrypoint.sh ./
RUN chmod +x entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
entrypoint.sh

#!/bin/sh

# ...

nc -l -k -p 1337
#!/bin/sh

# ...

exec "$@"
docker compose.yml

services:
  nc:
    build:
      context: .
      dockerfile: Dockerfile
services:
  nc:
    build:
      context: .
      dockerfile: Dockerfile
    command: nc -l -k -p 1337
docker组装--构建

或:

entrypoint.sh

#!/bin/sh

# ...

nc -l -k -p 1337
#!/bin/sh

# ...

exec "$@"
docker compose.yml

services:
  nc:
    build:
      context: .
      dockerfile: Dockerfile
services:
  nc:
    build:
      context: .
      dockerfile: Dockerfile
    command: nc -l -k -p 1337
docker组装--构建


docker compose run--rm nc-l-k-p 1337

假设
nc
在正常情况下实际响应信号,您需要:

  • 使用
    exec
  • 使用命令的列表版本
  • 因此,在第一种情况下,向shell脚本添加一个
    exec

    在第二种情况下,可能需要
    命令:[“nc”、“-l”、“-k”、“-p”、“1337”]
    在compose文件中


    查看完整的检查表。

    nc
    正常响应。我两个都试过了,结果都一样。在第一个示例
    exec nc-l-k-p 1337
    中,在第二个示例中,使用
    exec“$@”
    命令的列表版本。此外,我运行的其他服务对没有
    exec
    或命令列表版本的信号作出反应。