首页 > 解决方案 > docker-compose 不发送信号到陷阱

问题描述

我有一个简单的 docker-compose.yml

version: '3.8'
services:
  port-forwarder:
    image: test
    container_name: port-forwarder
    volumes:
      - "/path_to_scripts/port_forwarder.sh:/port_forwarder.sh"
    command: "/port_forwarder.sh"

port_forwarder.sh

#!/usr/bin/env bash
trap 'echo exiting ; exit 0' SIGTERM TERM SIGINT INT EXIT WINCH SIGWINCH
tail -f /dev/null

Dockerfile

FROM alpine:3.12.0
RUN apk add --no-cache bash

如果我构建图像并使用它运行它

docker build -t test .
docker run --name test -it --rm -v /path_to_scripts/port_forwarder.sh:/port_forwarder.sh test /port_forwarder.sh

然后按 ctrl-c,它会捕获 SIGTERM 并在控制台上写“退出”。但是当我使用 'docker-compose up' 运行它并点击 ctrl-c 时,它会挂起并在 10 秒后被杀死。我在 OSX 上使用 docker。可能是什么原因以及如何从 docker-compose 捕获终止信号?

标签: docker-compose

解决方案


推荐阅读