可以使用依赖关系和自定义任务来实现在一个容器启动之前等待另一个容器启动的功能。
- container: myContainer1
image: myDockerImage1
ports:
- 8081:80
environment:
- WAIT_FOR_PORT=80
- container: myContainer2
image: myDockerImage2
ports:
- 8082:80
dependsOn: myContainer1
variables:
- name: WAIT_FOR_PORT
value: "80"
- task: WaitForContainer@1
inputs:
containerName: $(containerName)
waitForPort: $(waitForPort)
其中,$(containerName)和$(waitForPort)是自定义任务中定义的变量。自定义任务的示例代码:
steps:
- script: |
set -eu
container=$(echo $(containerName) | cut -d : -f 1)
port=$(echo $(waitForPort) | cut -d : -f 2)
echo "Waiting for $container to listen on port $port"
while [ $(docker inspect --format '{{ .State.Status }}' $container) = "running" ]; do
if nc -z -w1 $container $port; then
echo "$container is listening on port $port."
break
fi
echo "$container is still not listening on port $port..."
sleep 1
done
env:
containerName: $(containerName)
waitForPort: $(waitForPort)
displayName: 'Wait for container to be ready'
通过以上配置,第二个容器将会等待第一个容器在端口80上监听并启动后,再启动自身。