Commit 637896d5 authored by Joseph A. Lutz's avatar Joseph A. Lutz

Add files for MantisBT docker image

Signed-off-by: 's avatarJoseph A. Lutz <joseph.lutz@novatechweb.com>
parent 829844d2
#
# mantisbt Docker container
#
# Version 0.1
FROM php:5.6-apache
MAINTAINER Joseph Lutz <Joseph.Lutz@novatechweb.com>
ENV MANTISBT_VERSION 1.2.19
RUN sed -i 's| main$| main contrib non-free|' /etc/apt/sources.list \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \
libcurl3 \
libicu52 \
libjpeg62-turbo \
libmcrypt4 \
libpq5 \
ttf-mscorefonts-installer \
\
libcurl4-openssl-dev \
libfreetype6-dev \
libicu-dev \
libjpeg62-turbo-dev \
libldap2-dev \
libmcrypt-dev \
libpng12-dev \
libpq-dev \
&& docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu \
&& docker-php-ext-configure gd --with-png-dir=/usr --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install intl mbstring mysql mysqli pgsql opcache ldap iconv mcrypt gd curl fileinfo \
&& DEBIAN_FRONTEND=noninteractive apt-get purge --yes \
autoconf \
build-essential \
libcurl4-openssl-dev \
libfreetype6-dev \
libicu-dev \
libjpeg62-turbo-dev \
libldap2-dev \
libmcrypt-dev \
libpng12-dev \
libpq-dev \
&& rm -rf /var/www/html/index.html \
&& DEBIAN_FRONTEND=noninteractive apt-get autoremove --yes \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# download and extract mantisbt
RUN mkdir -p /usr/src/mantisbt /var/www-shared/html && \
curl -L "http://downloads.sourceforge.net/project/mantisbt/mantis-stable/${MANTISBT_VERSION}/mantisbt-${MANTISBT_VERSION}.tar.gz" | \
tar xzC /usr/src/mantisbt --strip-components=1
# copy over files
COPY \
config/000-default-ssl.conf \
config/000-default.conf \
config/000-mantisbt.conf \
/etc/apache2/sites-available/
COPY config/php.ini /usr/local/etc/php/
COPY ./docker-entrypoint.sh \
./configure.sh \
/
# run the configuration script
RUN ["/bin/bash", "/configure.sh"]
# specify which network ports will be used
EXPOSE 80 443
# specify the volumes directly related to this image
VOLUME ["/var/www/html"]
# start the entrypoint script
WORKDIR /var/www/html
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["mantisbt"]
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin mantis_webmaster@MANTISBT_HOSTNAME
ServerName MANTISBT_HOSTNAME
DocumentRoot /var/www/html/
SSLEngine on
SSLCertificateFile /etc/ssl/private/apache2.crt
SSLCertificateKeyFile /etc/ssl/private/apache2.key
SSLCertificateChainFile /etc/ssl/private/apache2_bundle.crt
SSLCACertificatePath /etc/ssl/certs/
# SSLCACertificateFile /etc/ssl/private/ca-bundle.crt
SSLCARevocationPath /etc/grid-security/certificates
# SSLCARevocationFile /etc/grid-security/certificates/ca-bundle.crl
#SSLVerifyClient require
#SSLVerifyDepth 10
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
ErrorLog /proc/self/fd/2
CustomLog /proc/self/fd/1 combined
</VirtualHost>
</IfModule>
<VirtualHost *:80>
ServerAdmin mantis_webmaster@MANTISBT_HOSTNAME
ServerName MANTISBT_HOSTNAME
DocumentRoot /var/www/html/
ErrorLog /proc/self/fd/2
CustomLog /proc/self/fd/1 combined
</VirtualHost>
<Directory /var/www/html>
<IfModule rewrite_module>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
</Directory>
[PHP]
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 64M
;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 70M
#!/bin/bash
set -e
# comment out apache2 config file lines that reference the environment variables
sed -i 's|^Mutex file|#Mutex file|' /etc/apache2/apache2.conf
sed -i 's|^PidFile |#PidFile |' /etc/apache2/apache2.conf
sed -i 's|^User |#User |' /etc/apache2/apache2.conf
sed -i 's|^Group |#Group |' /etc/apache2/apache2.conf
sed -i 's|^ErrorLog |#ErrorLog |' /etc/apache2/apache2.conf
# place the hard coded environment variables
cat << EOF >> /etc/apache2/apache2.conf
# hard code the environment variables
Mutex file:/var/lock/apache2 default
PidFile /var/run/apache2/apache2.pid
User www-data
Group www-data
ErrorLog /proc/self/fd/2
CustomLog /proc/self/fd/1 combined
EOF
sed -i 's|^CustomLog.*|CustomLog /proc/self/fd/1 combined|' /etc/apache2/conf-available/other-vhosts-access-log.conf
# set the SSLSessionCache directory
sed -i 's|\$[{]APACHE_RUN_DIR[}]|/var/run/apache2|' /etc/apache2/mods-available/ssl.conf
# create apache domainname config
echo "ServerName localhost" > /etc/apache2/conf-available/servername.conf
a2enconf servername.conf
# enable modules
a2enmod \
rewrite \
ssl
# Enable the site
a2ensite \
000-default-ssl.conf \
000-default.conf \
000-mantisbt.conf
rm -f /var/www/html/index.html ${0}
#!/bin/bash
set -e
# ************************************************************
# Options passed to the docker container to run scripts
# ************************************************************
# mantisbt: Starts apache running. This is the containers default
# lock : Set MantisBT to read-only
# unlock : Set MantisBT to read-write
# backup : backup the mantisbt static files
# restore : import the mantisbt static files archive
# ************************************************************
# environment variables
# ************************************************************
# MANTISBT_HOSTNAME : Sets the hostname in the apache2 config
# MANTISBT_DB_DB_NAME : MANTISBT_DB_DB_NAME, MANTISBT_DB_ENV_MYSQL_DATABASE | MANTISBT_DB_ENV_POSTGRES_DB, config_inc.php ( $g_database_name )
# MANTISBT_DB_USER : MANTISBT_DB_USER, MANTISBT_DB_ENV_MYSQL_USER | MANTISBT_DB_ENV_POSTGRES_USER, config_inc.php ( $g_db_username )
# MANTISBT_DB_PASSWORD : MANTISBT_DB_PASSWORD, MANTISBT_DB_ENV_MYSQL_PASSWORD | MANTISBT_DB_ENV_POSTGRES_PASSWORD, config_inc.php ( $g_db_password )
if [[ ! -z "${MANTISBT_DB_ENV_MYSQL_VERSION}" ]]; then
MANTISBT_DB_DB_NAME=${MANTISBT_DB_DB_NAME:-${MANTISBT_DB_ENV_MYSQL_DATABASE}}
MANTISBT_DB_USER=${MANTISBT_DB_USER:-${MANTISBT_DB_ENV_MYSQL_USER}}
MANTISBT_DB_PASSWORD=${MANTISBT_DB_PASSWORD:-${MANTISBT_DB_ENV_MYSQL_PASSWORD}}
elif [[ ! -z "${MANTISBT_DB_ENV_PG_VERSION}" ]];then
MANTISBT_DB_DB_NAME=${MANTISBT_DB_DB_NAME:-${MANTISBT_DB_ENV_POSTGRES_DB}}
MANTISBT_DB_USER=${MANTISBT_DB_USER:-${MANTISBT_DB_ENV_POSTGRES_USER}}
MANTISBT_DB_PASSWORD=${MANTISBT_DB_PASSWORD:-${MANTISBT_DB_ENV_POSTGRES_PASSWORD}}
fi
MANTISBT_BASE_DIR=$(pwd)
lock_mantisbt() {
# set mantisbt to readonly if not already
cp ${MANTISBT_BASE_DIR}/mantis_offline.php.sample ${MANTISBT_BASE_DIR}/mantis_offline.php
echo >&2 "MantisBT locked to read-only mode"
# wait for any transactions to compleate
sleep 5
}
unlock_mantisbt() {
# set MantisBT to read/write
rm -f ${MANTISBT_BASE_DIR}/mantis_offline.php
echo >&2 "MantisBT unlocked to read-write mode"
}
if [[ $(ls -A1 ${MANTISBT_BASE_DIR} | wc -l) == '0' ]]; then
# initial setup of mantisbt
if [[ ! -e ${MANTISBT_BASE_DIR}/index.php ]] || [[ ! -e ${MANTISBT_BASE_DIR}/config_inc.php ]]; then
echo >&2 "Installing Mantis Bug Tracker into ${MANTISBT_BASE_DIR} - copying now..."
tar cf - --one-file-system -C /usr/src/mantisbt . | tar xf -
fi
fi
# Set the server name
if [[ ! -z "${MANTISBT_HOSTNAME}" ]]; then
# change any value of MANTISBT_HOSTNAME to the value
sed -i 's|MANTISBT_HOSTNAME|'${MANTISBT_HOSTNAME}'|' \
/etc/apache2/sites-available/000-default-ssl.conf \
/etc/apache2/sites-available/000-default.conf
# update the ServerName line
sed -i 's|ServerName .*$|ServerName '${MANTISBT_HOSTNAME}'|' \
/etc/apache2/sites-available/000-default-ssl.conf \
/etc/apache2/sites-available/000-default.conf
fi
update_config_inc() {
# update config_inc.php with environment var values
if [[ -w ${MANTISBT_BASE_DIR}/config_inc.php ]]; then
echo >&2 "Updating config_inc.php"
sed -i 's|$g_hostname\( *= \).*|$g_hostname\1'"'mantisbt_db'"';|' ${MANTISBT_BASE_DIR}/config_inc.php
if [[ ! -z "${MANTISBT_DB_ENV_MYSQL_VERSION}" ]]; then
sed -i 's|$g_db_type\( *= \).*|$g_db_type\1'"'mysql'"';|' ${MANTISBT_BASE_DIR}/config_inc.php
elif [[ ! -z "${MANTISBT_DB_ENV_PG_VERSION}" ]]; then
sed -i 's|$g_db_type\( *= \).*|$g_db_type\1'"'postgres'"';|' ${MANTISBT_BASE_DIR}/config_inc.php
fi
if [[ ! -z "${MANTISBT_DB_DB_NAME}" ]]; then \
sed -i 's|$g_database_name\( *= \).*|$g_database_name\1'"'${MANTISBT_DB_DB_NAME}'"';|' ${MANTISBT_BASE_DIR}/config_inc.php
fi
if [[ ! -z "${MANTISBT_DB_USER}" ]]; then \
sed -i 's|$g_db_username\( *= \).*|$g_db_username\1'"'${MANTISBT_DB_USER}'"';|' ${MANTISBT_BASE_DIR}/config_inc.php
fi
if [[ ! -z "${MANTISBT_DB_PASSWORD}" ]]; then \
sed -i 's|$g_db_password\( *= \).*|$g_db_password\1'"'${MANTISBT_DB_PASSWORD}'"';|' ${MANTISBT_BASE_DIR}/config_inc.php
fi
fi
# uploads are not configured by default. Make a directory for where uploads are located
mkdir -p /var/www/html/uploads
chown -R www-data:www-data /var/www/html/uploads/
}
update_config_inc
case ${1} in
mantisbt)
# verify permissions
chown -R www-data:www-data ${MANTISBT_BASE_DIR}
# Apache gets grumpy about PID files pre-existing
rm -f /var/run/apache2/apache2.pid
# Start apache
exec apache2 -D FOREGROUND
;;
config_inc)
cat > ${MANTISBT_BASE_DIR}/config_inc.php
chown -R www-data:www-data ${MANTISBT_BASE_DIR}
update_config_inc
;;
lock)
if [[ ! -w ${MANTISBT_BASE_DIR}/mantis_offline.php.sample ]]; then
echo >&2 "Sample locking file not found: ${MANTISBT_BASE_DIR}/mantis_offline.php.sample"
exit 1
fi
lock_mantisbt
;;
unlock)
if [[ ! -w ${MANTISBT_BASE_DIR}/mantis_offline.php.sample ]]; then
echo >&2 "Sample locking file not found: ${MANTISBT_BASE_DIR}/mantis_offline.php.sample"
exit 1
fi
unlock_mantisbt
;;
backup)
# set MediWiki to read only
if [[ -w ${MANTISBT_BASE_DIR}/mantis_offline.php.sample ]]; then \
lock_mantisbt
fi
# remove the admin directory
rm -rf ${MANTISBT_BASE_DIR}/admin
# backup the selected directory
/bin/tar \
--create \
--preserve-permissions \
--same-owner \
--directory=${MANTISBT_BASE_DIR} \
--to-stdout \
./*
# Now backup the database and then unlock MantisBT
;;
restore)
if [[ -w ${MANTISBT_BASE_DIR}/mantis_offline.php.sample ]]; then \
lock_mantisbt
fi
echo >&2 "Extract the archive"
/bin/tar \
--extract \
--preserve-permissions \
--preserve-order \
--same-owner \
--directory=${MANTISBT_BASE_DIR} \
-f -
echo >&2 "Set permissions"
chown -R www-data:www-data ${MANTISBT_BASE_DIR}
# make certain MantisBT is still locked
if [[ -w ${MANTISBT_BASE_DIR}/mantis_offline.php.sample ]]; then \
lock_mantisbt
fi
update_config_inc
# remove the admin directory
rm -rf ${MANTISBT_BASE_DIR}/admin
# Now restore the database and then use the update script
if [[ ! -w ${MANTISBT_BASE_DIR}/config_inc.php ]]; then
echo >&2 "Settings file not found after restore: ${MANTISBT_BASE_DIR}/config_inc.php"
exit 1
fi
;;
remove_admin)
# remove the admin directory
rm -rf ${MANTISBT_BASE_DIR}/admin
;;
get_admin)
echo >&2 "Installing Mantis Bug Tracker Admin pages into ${MANTISBT_BASE_DIR}/admin - copying now..."
mkdir ${MANTISBT_BASE_DIR}/admin
tar cf - --one-file-system -C /usr/src/mantisbt/admin . | tar -C ${MANTISBT_BASE_DIR}/admin -xf -
;;
*)
# run some other command in the docker container
exec "$@"
;;
esac
#!/bin/bash
source config.sh
set -e
# ************************************************************
# check state before performing
case ${1} in
backup)
[[ -f ${HOST_MANTISBT_BACKUP_DIR}${STATIC_BACKUP_FILE} ]] && \
rm -f ${HOST_MANTISBT_BACKUP_DIR}${STATIC_BACKUP_FILE}
[[ -f ${HOST_MANTISBT_BACKUP_DIR}${DATABASE_FILES_TABLE_BACKUP_FILE} ]] && \
rm -f ${HOST_MANTISBT_BACKUP_DIR}${DATABASE_FILES_TABLE_BACKUP_FILE}
[[ -f ${HOST_MANTISBT_BACKUP_DIR}${DATABASE_BACKUP_FILE} ]] && \
rm -f ${HOST_MANTISBT_BACKUP_DIR}${DATABASE_BACKUP_FILE}
;;
restore)
if [[ ! -f ${HOST_MANTISBT_RESTORE_DIR}${STATIC_BACKUP_FILE} ]] && \
[[ ! -f ${HOST_MANTISBT_RESTORE_DIR}${DATABASE_FILES_TABLE_BACKUP_FILE} ]] && \
[[ ! -f ${HOST_MANTISBT_RESTORE_DIR}${DATABASE_BACKUP_FILE} ]]; then
printf >&2 'ERROR: The MantisBT files to restore was not found!\n'
exit 1
fi
;;
*)
echo >&2 "Usage:"
echo >&2 " mantisbt.sh <backup | restore> [-u <DB username>] [-p <DB password>]"
echo >&2 ""
exit 0
;;
esac
dbuser=''
dbpass=''
while getopts ":u:p:" opt ${@:2}; do
case ${opt} in
u)
dbuser=${OPTARG}
;;
p)
dbpass=${OPTARG}
;;
\?)
echo >&2 "Invalid argument: ${opt} ${OPTARG}"
echo >&2 ""
echo >&2 "Usage:"
echo >&2 " mantisbt.sh <backup | restore> [-u <DB username>] [-p <DB password>]"
echo >&2 ""
exit 1
;;
esac
done
# make certian the containers exist
docker inspect ${MANTISBT_CONTAINER_NAME} > /dev/null
docker inspect ${MANTISBT_DB_CONTAINER_NAME} > /dev/null
docker inspect ${MANTISBT_DV_NAME} > /dev/null
docker inspect ${MANTISBT_DB_DV_NAME} > /dev/null
get_db_user_and_password() {
db_user="$(docker 2>&1 exec ${MANTISBT_CONTAINER_NAME} grep -e '^$g_db_username' config_inc.php|sed 's|^.* = \"\(.*\)\";$|\1|' || true)"
db_password="$(docker 2>&1 exec ${MANTISBT_CONTAINER_NAME} grep -e '^$g_db_password' config_inc.php|sed 's|^.* = \"\(.*\)\";$|\1|' || true)"
if [[ ! -z "${dbuser}" ]]; then
db_user="${dbuser}"
fi
if [[ ! -z "${dbpass}" ]]; then
db_password="${dbpass}"
fi
if [[ ! -z "${db_user}" ]]; then
echo "db_user=\"${db_user}\""
fi
if [[ ! -z "${db_password}" ]]; then
echo "db_password=\"${db_password}\""
fi
}
eval $(get_db_user_and_password)
wait_for_mantisbt_start() {
count=0
printf >&2 '==> Wait for MantisBT running: '
while ! \
docker exec "${MANTISBT_CONTAINER_NAME}" \
ls /var/www/html/index.php &> /dev/null
do
sleep 1
printf >&2 '.'
(( ${count} > 60 )) && exit 1
count=$((count+1))
done
printf >&2 '\n'
}
wait_for_mantisbt_start
wait_for_database_start() {
count=0
printf >&2 '==> Wait for MySQL running: '
while ! \
echo "SHOW GLOBAL STATUS;" | \
docker exec -i "${MANTISBT_DB_CONTAINER_NAME}" \
mysql \
--host=localhost \
--user="${db_user}" \
--password="${db_password}" \
${MANTISBT_DB_DB_NAME} &> /dev/null
do
sleep 1
printf >&2 '.'
(( ${count} > 60 )) && exit 1
count=$((count+1))
done
printf >&2 '\n'
}
case ${1} in
backup)
if [[ -z "${db_user}" ]] || [[ -z "${db_password}" ]]; then
printf >&2 '==> Could not determine database user and/or password\n'
exit 1
fi
printf >&2 '==> Backing up MantisBT static files\n '
docker exec ${MANTISBT_CONTAINER_NAME} /docker-entrypoint.sh backup \
> ${HOST_MANTISBT_BACKUP_DIR}${STATIC_BACKUP_FILE}
wait_for_database_start
printf >&2 '==> Backing up MantisBT database (files table)\n '
docker exec "${MANTISBT_DB_CONTAINER_NAME}" \
mysqldump \
--host=localhost \
--user="${db_user}" \
--password="${db_password}" \
--add-drop-table \
--flush-privileges \
--hex-blob \
--skip-extended-insert \
--tz-utc \
--default-character-set=utf8 \
${MANTISBT_DB_DB_NAME} mantis_bug_file_table \
> ${HOST_MANTISBT_BACKUP_DIR}${DATABASE_FILES_TABLE_BACKUP_FILE}
printf >&2 '==> Backing up MantisBT database (remaining tables)\n '
docker exec "${MANTISBT_DB_CONTAINER_NAME}" \
mysqldump \
--host=localhost \
--user="${db_user}" \
--password="${db_password}" \
--add-drop-table \
--flush-privileges \
--hex-blob \
--skip-extended-insert \
--ignore-table=${MANTISBT_DB_DB_NAME}.mantis_bug_file_table \
--tz-utc \
--default-character-set=utf8 \
${MANTISBT_DB_DB_NAME} \
> ${HOST_MANTISBT_BACKUP_DIR}${DATABASE_BACKUP_FILE}
printf >&2 '==> Unlocking MantisBT\n '
docker exec ${MANTISBT_CONTAINER_NAME} /docker-entrypoint.sh unlock
;;
restore)
if [[ ! -f ${HOST_MANTISBT_RESTORE_DIR}${STATIC_BACKUP_FILE} ]]; then
printf >&2 '==> Lock MantisBT\n '
docker exec "${MANTISBT_CONTAINER_NAME}" /docker-entrypoint.sh lock
else
auth_options=''
if [[ ! -z "${db_user}" ]]; then
auth_options="${auth_options} -u ${db_user}"
fi
if [[ ! -z "${db_password}" ]]; then
auth_options="${auth_options} -p ${db_password}"
fi
printf >&2 '==> Restore MantisBT static files\n '
docker exec -i "${MANTISBT_CONTAINER_NAME}" /docker-entrypoint.sh restore ${auth_options} < \
${HOST_MANTISBT_RESTORE_DIR}${STATIC_BACKUP_FILE}
if [[ ! -z "${dbuser}" ]] || [[ ! -z "${dbpass}" ]]; then
# update the restored config_inc.php with the passed in dbuser and/or dbpassword
if [[ ! -z "${dbuser}" ]]; then
docker exec "${MANTISBT_CONTAINER_NAME}" \
sed -i \
's|$g_db_username = .*|$g_db_username = "'${dbuser}'";|' \
config_inc.php || true
fi
if [[ ! -z "${dbpass}" ]]; then
docker exec "${MANTISBT_CONTAINER_NAME}" \
sed -i \
's|$g_db_password = .*|$g_db_password = "'${dbpass}'";|' \
config_inc.php || true
fi
else
# get database username and password from MantisBT config
eval $(get_db_user_and_password)
fi
fi
if [[ -f ${HOST_MANTISBT_RESTORE_DIR}${DATABASE_BACKUP_FILE} ]] && [[ -f ${HOST_MANTISBT_RESTORE_DIR}${DATABASE_FILES_TABLE_BACKUP_FILE} ]]; then
wait_for_database_start
if [[ -z "${db_user}" ]] || [[ -z "${db_password}" ]]; then
printf >&2 '==> Could not determine database user and/or password\n'
exit 1
fi
printf >&2 '==> Restore MantisBT database (files table)\n '
docker exec -i "${MANTISBT_DB_CONTAINER_NAME}" \
mysql \
--host=localhost \
--user="${db_user}" \
--password="${db_password}" \
${MANTISBT_DB_DB_NAME} < \
${HOST_MANTISBT_RESTORE_DIR}${DATABASE_FILES_TABLE_BACKUP_FILE}
printf >&2 '==> Restore MantisBT database (remaining tables)\n '
docker exec -i "${MANTISBT_DB_CONTAINER_NAME}" \
mysql \
--host=localhost \
--user="${db_user}" \
--password="${db_password}" \
${MANTISBT_DB_DB_NAME} < \
${HOST_MANTISBT_RESTORE_DIR}${DATABASE_BACKUP_FILE}
fi
printf >&2 '==> Remove Admin\n '
docker exec "${MANTISBT_CONTAINER_NAME}" /docker-entrypoint.sh remove_admin
printf >&2 '==> Unlock MantisBT\n '
docker exec "${MANTISBT_CONTAINER_NAME}" /docker-entrypoint.sh unlock
printf >&2 '==> Finished running script\n'
;;
esac
# ************************************************************
# restart the docker container
docker restart ${MANTISBT_CONTAINER_NAME}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment