docker 从另一个容器(supervisor)调用程序(nodejs)

docker call program (nodejs) from another container (supervisor)

我的 docker-compose.yml 是这样的:

nodejs:
  build: .
  dockerfile: Dockerfile-nodejs
  tty: true
  ports:
    - "${SOCKET_PORT}:8081"
  volumes:
    - ../node:/var/www/html

supervisor:
  build: .
  dockerfile: Dockerfile-supervisor
  tty: true
  volumes:
    - ..:/var/www/html
    - ./config/supervisor/conf.d:/etc/supervisor/conf.d
  links:
    - nodejs:nodejs

并且我创建了主管程序配置文件:

[program:nodejs.socket]
command=nodejs /var/www/html/node/server.js
autostart=true

但是:我不能运行这个程序,因为supervisor的容器

can't find command 'nodejs'


问题:我真的可以 运行 来自 supervisor-container 的 nodejs 还是我必须在 nodejs-container 中安装 supervisor?

Question: Can I actually run nodejs from supervisor-container or I must install supervisor in nodejs-container?

你必须在持有nodejs的镜像中安装supervisor,因为supervisor需要执行nodejs,这意味着将它作为子进程。

这是常见的方式。 但是,您可以在两个容器之间共享 pid 命名空间,但您也需要在同一映像中安装 nodejs。所以到那时,这就变得棘手了。