加载Docker容器后运行Bash脚本

问题描述 投票:0回答:1

我正在通过docker-composer运行Docker。它在LAMP环境中运行良好。我有一个docker文件,其中安装了几个Apache模块并加载它们。加载Docker容器后,我想运行bash脚本以安装php库并启动服务。我的bash脚本如下

#!/bin/bash

cd var/www/html/gearman-1.1.2
./configure
make
make install

service apache2 restart

gearmand -d

echo "German should be working now"

我想在每次执行docker-composer up -d命令时都运行此脚本,因此我不必手动执行该过程。

我将以下行添加到我的Docker文件中

RUN chmod +x /var/www/html/run.sh
RUN run.sh

上面的命令抛出错误,导致Apache服务器无法启动。您能告诉我在Docker启动后执行bash脚本的正确方法是什么。我的bash脚本的位置在var / www / html中,我也将该位置安装到本地驱动器中。

Bash脚本在登录到容器后通过命令链接手动运行时运行良好。

完整的docker文件如下所示

FROM php:5.6-apache

RUN apt-get -y update && apt-get upgrade -y

# Install tools && libraries
RUN apt-get -y install --fix-missing apt-utils nano wget dialog \
    build-essential git curl libcurl3 libcurl3-dev zip \
    libmcrypt-dev libsqlite3-dev libsqlite3-0 mysql-client \
    zlib1g-dev libicu-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev libgearman-dev \
    gearman-job-server \
    && rm -rf /var/lib/apt/lists/*

# Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# PHP5 Extensions
RUN docker-php-ext-install curl \
    && docker-php-ext-install tokenizer \
    && docker-php-ext-install json \
    && docker-php-ext-install mcrypt \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install pdo_sqlite \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install zip \
    && docker-php-ext-install -j$(nproc) intl \
    && docker-php-ext-install mbstring \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && pecl install xdebug-2.5.5 && docker-php-ext-enable xdebug \
    && echo "xdebug.remote_enable=1" >> /usr/local/etc/php/php.ini


# Enable apache modules
RUN a2enmod rewrite headers

EXPOSE 80

ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

#RUN /bin/bash "chmod +x /var/www/html/run.sh"
#RUN run.sh

值得一提的是,我正在使用docker toolkit,并且我在Windows 10家庭版中

bash docker docker-compose dockerfile gearman
1个回答
0
投票

看来您需要在容器中启动两个进程gearmanapache。并且两者都需要配置(编译)。因此,您需要将run.sh分为两部分。第一个用于编译gearman,第二个用于启动apachegearman。这是一个示例Dockerfile和一个示例入口点文件:

entrypoint.sh

#!/bin/bash

gearmand -d
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start gearmand: $status"
  exit $status
fi

/usr/sbin/apache2ctl -D FOREGROUND;

Dockerfile

FROM php:5.6-apache

RUN apt-get -y update && apt-get upgrade -y

# Install your PHP extensions and dependencies ...

# Enable apache modules
RUN a2enmod rewrite headers

# compile gearman and install it
RUN cd /var/www/html/gearman-1.1.2 && ./configure && make && make install

EXPOSE 80

ADD entrypoint.sh /var/www/html/
RUN chmod +x /var/www/html/entrypoint.sh
ENTRYPOINT ["/var/www/html/entrypoint.sh"]

而且您可以从此Docker document获取有关在容器中启动多个进程的更多信息>

© www.soinside.com 2019 - 2024. All rights reserved.