| <#-- |
| ~ 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} |