2017-01-23 118 views
0

這是一個完整的Docker新手問題。我有一個.sh文件,我想調用docker運行兩次。然而,只有第一個碼頭運行執行,爲什麼?Docker - 無法從同一個.sh文件執行多個docker運行命令

mvn clean package docker:build -DskipTests 
docker run -e "SPRING_PROFILES_ACTIVE=profile1" -p 8080:8080 -ti something/myapp 
docker run -e "SPRING_PROFILES_ACTIVE=profile2" -p 8181:8181 -ti something/myapp 

回答

3

的原因是,你與-it運行的容器。這指示Docker分配連接到容器stdin的僞TTY,並在容器中創建交互式bash shell。所以當你運行第一個容器時,交互式shell會阻塞第二個容器的執行。

嘗試用分離模式替換運行容器的-d。請參閱guide

docker run -e "SPRING_PROFILES_ACTIVE=profile1" -p 8080:8080 -d something/myapp 
docker run -e "SPRING_PROFILES_ACTIVE=profile2" -p 8181:8181 -d something/myapp 
0

嘗試增加-d運行在分離模式容器:

docker run -e "SPRING_PROFILES_ACTIVE=profile1" -p 8080:8080 -d -ti something/myapp 
docker run -e "SPRING_PROFILES_ACTIVE=profile2" -p 8181:8181 -d -ti something/myapp 
+0

afaik無法使用'-d'和'-it'開關運行容器。 – gaetano

+1

當然,這是可能的。 – gile

+1

按照設計,當用於運行容器的根進程退出時,容器以分離模式退出;所以如果容器運行命令/ bin/bash,它很快就會停止。對於交互式進程(如shell),您必須一起使用-i -t才能爲容器進程分配tty。 -i -t經常被寫入。 – gile