无法在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
或命令列表版本的信号作出反应。