| <#-- | |
| ~ Licensed to the Apache Software Foundation (ASF) under one or more | |
| ~ contributor license agreements. See the NOTICE file distributed with | |
| ~ this work for additional information regarding copyright ownership. | |
| ~ The ASF licenses this file to You under the Apache License, Version 2.0 | |
| ~ (the "License"); you may not use this file except in compliance with | |
| ~ the License. You may obtain a copy of the License at | |
| ~ | |
| ~ http://www.apache.org/licenses/LICENSE-2.0 | |
| ~ | |
| ~ Unless required by applicable law or agreed to in writing, software | |
| ~ distributed under the License is distributed on an "AS IS" BASIS, | |
| ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| ~ See the License for the specific language governing permissions and | |
| ~ limitations under the License. | |
| --> | |
| <#-- | |
| The latest docker compose use "-" as separator rather than '_' when generating container name | |
| Use COMPOSE_COMPATIBILITY env to keep compatibility | |
| Refer to https://github.com/docker/compose/commit/150fd4b8cfa39726e68c12fc0fd45ac4e0f20c5f | |
| --> | |
| export COMPOSE_COMPATIBILITY=1 | |
| compose_file="${docker_compose_file}" | |
| project_name=$(echo "${build_id}" |sed -e "s/\.//g" |awk '{print tolower($0)}') | |
| docker_container_name="${docker_container_name}_1" | |
| <#noparse> | |
| container_name="${project_name}_${docker_container_name}" | |
| # Diagnostic: log docker compose version | |
| docker compose version >&2 || true | |
| echo "=== Starting docker compose ===" >&2 | |
| compose_output=$(docker compose -p ${project_name} -f ${compose_file} up -d 2>&1) | |
| compose_exit=$? | |
| echo "${compose_output}" >&2 | |
| if [[ ${compose_exit} -ne 0 ]]; then | |
| echo "docker compose up exited with code ${compose_exit}" >&2 | |
| fi | |
| container_id=`docker ps -qf "name=${container_name}"` | |
| if [[ -z "${container_id}" ]]; then | |
| echo "docker startup failure! container_name=${container_name} not found." >&2 | |
| echo "=== docker ps -a ===" >&2 | |
| docker ps -a >&2 || true | |
| echo "=== docker compose logs ===" >&2 | |
| docker compose -p ${project_name} -f ${compose_file} logs 2>&1 >&2 || true | |
| # Create container.log with diagnostic info | |
| mkdir -p ${SCENARIO_HOME}/logs | |
| { | |
| echo "=== CONTAINER STARTUP FAILURE ===" | |
| echo "container_name=${container_name} was not found by docker ps" | |
| echo "compose_exit_code=${compose_exit}" | |
| echo "compose_output:" | |
| echo "${compose_output}" | |
| echo "=== docker ps -a ===" | |
| docker ps -a 2>&1 || true | |
| echo "=== docker compose logs ===" | |
| docker compose -p ${project_name} -f ${compose_file} logs 2>&1 || true | |
| } >${SCENARIO_HOME}/logs/container.log | |
| docker compose -p ${project_name} -f ${compose_file} kill 2>/dev/null || true | |
| docker compose -p ${project_name} -f ${compose_file} rm -f 2>/dev/null || true | |
| status=1 | |
| else | |
| status=`docker wait ${container_id}` | |
| [[ $status -ne 0 ]] && docker logs ${container_id} >&2 | |
| # Recreate logs dir in case the container removed it via volume mount | |
| mkdir -p ${SCENARIO_HOME}/logs | |
| docker logs ${container_id} >${SCENARIO_HOME}/logs/container.log | |
| docker compose -p ${project_name} -f ${compose_file} kill | |
| docker compose -p ${project_name} -f ${compose_file} rm -f | |
| fi | |
| </#noparse> | |
| ${removeImagesScript} |