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。所以到那时,这就变得棘手了。
我的 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。所以到那时,这就变得棘手了。