我对使用CMD命令的Dockerfile有疑问。我正在尝试设置一个服务器,它需要在启动时在docker容器中运行2个命令。我可以自己运行1或其他服务,但如果我尝试编写脚本同时运行2个服务,它就会失败。我已经尝试了各种各样的nohup,&,linux任务后台,但我还是无法解决它。
这是我正在尝试实现此目标的项目: https://djangofan.github.io/mountebank-with-ui-node/
import { Component, OnInit, Input} from '@angular/core';
declare var $:any;
@Component({
selector: 'app-add-modal',
templateUrl: './add-modal.component.html',
styleUrls: ['./add-modal.component.scss']
})
export class AddModalComponent implements OnInit{
@Input() catsToShow;
constructor() { }
ngOnInit() {}
ngOnChanges(changes: SimpleChanges) {
if(changes.catsToShow) {
$(".formAddContainer").iziModal({ width: '80%', padding: 10, borderBottom: false, background: 'rgba(136, 160, 185,0)' });
$('#addNewModal').iziModal('open');
}
}
显示此输出但端口未侦听:
#entryPoint.sh
#!/bin/bash
nohup /bin/bash -c "http-server -p 80 /ui" &
nohup /bin/bash -c "mb --port 2525 --configfile /mb/imposters.ejs --allowInjection" &
jobs -l
这是我的Dockerfile:
djangofan@MACPRO ~/workspace/mountebank-container (master)*$ ./run-container.sh
f5c50afd848e46df93989fcc471b4c0c163d2f5ad845a889013d59d951170878
f5c50afd848e46df93989fcc471b4c0c163d2f5ad845a889013d59d951170878 djangofan/mountebank-example "/bin/bash -c /scripts/entryPoint.sh" Less than a second ago Up Less than a second 0.0.0.0:2525->2525/tcp, 0.0.0.0:4546->4546/tcp, 0.0.0.0:5555->5555/tcp, 2424/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:2424->80/tcp nervous_lalande
[1]- 5 Running nohup /bin/bash -c "http-server -p 80 /ui" &
[2]+ 6 Running nohup /bin/bash -c "mb --port 2525 --configfile /mb/imposters.ejs --allowInjection" &
答案 0 :(得分:1)
docker容器内的一个进程必须不以后台模式运行,因为docker容器正在运行,而其中的主进程正在运行。
/scripts/entryPoint.sh
应为:
#!/bin/bash
nohup /bin/bash -c "http-server -p 80 /ui" &
nohup /bin/bash -c "mb --port 2525 --configfile /mb/imposters.ejs --allowInjection"
Dockerfile
中其他一切都很好。