簡體   English   中英

運行Docker容器時自動啟動mysql

[英]Start mysql automatically when running a Docker container

我創建了一個Dockerfile以在我的計算機上具有php7,mysql和其他一些庫的開發環境。

當運行容器時,apache服務會自動啟動,但是我無法通過mysql獲得相同的結果。 我的Dockerfile的最后一句看起來像這樣的CMD ["bash", "run.sh"] ,然后在run.sh中,我有這個:

#!/bin/bash
set -e

PHP_ERROR_REPORTING=${PHP_ERROR_REPORTING:-"E_ALL"}
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php/7.0/apache2/php.ini
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php/7.0/cli/php.ini
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php/7.0/apache2/php.ini
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php/7.0/cli/php.ini
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php/7.0/apache2/php.ini
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php/7.0/cli/php.ini

source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND

chmod 0755 start.sh
sleep 1
start.sh

/bin/bash

調用名為start.sh的文件,如下所示:

#!/usr/bin/env bash

# Mysql
sed -i -e 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mysql.conf.d/mysqld.cnf
service mysql start

它分為兩個文件,因為我測試了所有內容,但無法正常工作。 如果我在容器內執行docker exec並啟動mysql,一切正常。

任何我做錯事的想法嗎?

您在run.sh腳本中相對較早地運行exec /usr/sbin/apache2 -DFOREGROUND 關於exec的事情是它不啟動shell的子進程,而是用新進程替換了shell。

手冊頁

exec [-cl] [-a name] [command [arguments]]

如果指定了command,它將替換shell。 沒有創建新的過程。 自變量成為命令的自變量。

這意味着您的shell腳本在調用exec之后將不會繼續運行。

我現在可以建議使用Bash解決此問題的多種方法,但所有這些(在我看來)將是混亂且難以維護的。 如果您想在一個容器(例如Apache和MySQL)中管理多個流程,我強烈建議您看一看諸如supervisor之類的流程管理器。 官方文檔中有一篇出色的文章 ,甚至使用了與您類似的用例作為示例。

start.sh沒有絕對或相對路徑,就像它在您的PATH中一樣,是嗎?

您可以在start.sh的開頭添加一些“ echo'我實際上被稱為'> log.txt”,以檢查它是否被調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM