Docker init:true不转发信号

Docker init:true不转发信号,docker,go,docker-compose,signals,Docker,Go,Docker Compose,Signals,我希望我的停靠进程正确处理终止信号,因此我使用init:true。我在我的docker compose.yml文件中使用以下代码: version: '3.7' services: foo: build: context: ./foo init: true 但是,我的进程没有收到该信号 当我在docker外部运行我的进程并点击Ctrl-C时,我可以看到信号正在被处理(我的程序在信号处理程序中打印消息),但在docker内部,信号没有被处理(我的程序没有打印消息

我希望我的停靠进程正确处理终止信号,因此我使用
init:true
。我在我的
docker compose.yml
文件中使用以下代码:

version: '3.7'

services:
  foo:
    build:
      context: ./foo
    init: true
但是,我的进程没有收到该信号

当我在docker外部运行我的进程并点击Ctrl-C时,我可以看到信号正在被处理(我的程序在信号处理程序中打印消息),但在docker内部,信号没有被处理(我的程序没有打印消息)

编辑

以下是
foo/Dockerfile

FROM golang:1.11.4-alpine3.8 AS build
WORKDIR /go/src/foo
COPY ./ ./
RUN go build -a -tags netgo .
FROM alpine:3.8
WORKDIR /app
COPY --from=build /go/src/foo .
CMD ["./foo"]
这里是foo/foo.go(只需在循环中打印“等待”消息,直到收到信号):

主程序包
进口(
“fmt”
“操作系统”
“操作系统/信号”
“时间”
“系统调用”
)
陈波先生
var dur时间持续时间
func main(){
信号:=接通(切换操作信号)
完成=制造(陈波)
signal.Notify(sigs,syscall.SIGINT,syscall.SIGTERM)
pid:=os.Getpid()
fmt.Println(“pid:,pid”)
go func(){

sig:=我无法重现您的问题:

$ docker-compose up -d            
Building foo                                                                 
...
Successfully built 985c899d39fc
Successfully tagged init-issue_foo:latest
WARNING: Image for service foo was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating init-issue_foo_1_5d74c24a9fce ... done

$ docker-compose stop foo
Stopping init-issue_foo_1_e08f90ae3c56 ... done

$ docker-compose logs foo
Attaching to init-issue_foo_1_e08f90ae3c56
foo_1_e08f90ae3c56 | pid: 8
foo_1_e08f90ae3c56 | waiting
foo_1_e08f90ae3c56 | still waiting
foo_1_e08f90ae3c56 | still waiting
foo_1_e08f90ae3c56 | still waiting
foo_1_e08f90ae3c56 | still waiting
foo_1_e08f90ae3c56 | still waiting
foo_1_e08f90ae3c56 | still waiting
foo_1_e08f90ae3c56 | still waiting
foo_1_e08f90ae3c56 | still waiting
foo_1_e08f90ae3c56 | still waiting
foo_1_e08f90ae3c56 | terminated
foo_1_e08f90ae3c56 | got done
foo_1_e08f90ae3c56 | exiting
如果我尝试直接运行它:

$ docker run -it --rm --init init-issue_foo
pid: 8
waiting
still waiting
^Cinterrupt
got done
exiting

在每一种情况下,我都看到“完成了”行。如果您仍然无法从上述示例中成功执行此操作,请显示您运行的确切命令及其输出。

您的docker版本是什么?@JanGaraj,docker version 18.09.2,docker compose version 1.23.2,在my docker-compose.yml中,我有:version:'3.7'init应该是foo服务的一个设置,而不是一个构建对象的一部分。如果提供一个@BMitch,则更容易提供帮助。我修复了这个问题…从真实文件转录时出错。我在Windows上有关系吗?我没有要测试的Windows环境。
$ docker run -it --rm --init init-issue_foo
pid: 8
waiting
still waiting
^Cinterrupt
got done
exiting