Php build:创建的映像中的Docker容器正在工作,但在拉取映像中不工作 我已经用apache为我的应用程序构建了一个映像,用它创建的容器工作得很好。我可以在localhost上看到该页面。(文件#1:docker compose.yml) 我将图像推送到docker hub
我为同一个应用程序使用另一个(文件#2:docker-compose-prod.yml)重新创建了一个容器,它立即退出,没有任何错误,容器输出为: 模块重写已启用 httpd(pid 1)已在运行 下面是docker-compose.yml文件#1中描述的应用程序服务,我用于构建:Php build:创建的映像中的Docker容器正在工作,但在拉取映像中不工作 我已经用apache为我的应用程序构建了一个映像,用它创建的容器工作得很好。我可以在localhost上看到该页面。(文件#1:docker compose.yml) 我将图像推送到docker hub,php,apache,docker,containers,docker-compose,Php,Apache,Docker,Containers,Docker Compose,我为同一个应用程序使用另一个(文件#2:docker-compose-prod.yml)重新创建了一个容器,它立即退出,没有任何错误,容器输出为: 模块重写已启用 httpd(pid 1)已在运行 下面是docker-compose.yml文件#1中描述的应用程序服务,我用于构建: app: build: . links: - db - memcache:memcached - search ports:
app:
build: .
links:
- db
- memcache:memcached
- search
ports:
#- 8080:80 # when varnish enabled
- 80:80
restart: always
environment:
DB_HOST: db:3306
DB_PASSWORD: *****
SEARCH_HOST: search:9312
MEMCACHE_HOST: memcache:11211
这是docker-compose-prod.yml,我用于部署的文件#2,其中包含以下问题:
app:
image: vendor/app
#restart: always
links:
- db
- memcache:memcached
- search
ports:
#- 8080:80 # when varnish enabled
- 80:80
environment:
DB_HOST: db:3306
DB_PASSWORD: *****
SEARCH_HOST: search:9312
MEMCACHE_HOST: memcache:11211
#networks:
#- proxy
#- backend
下一个服务的容器始终处于启动和运行状态:
- db
- memcache:memcached
- search
一些细节:
我从app目录中运行docker-compose.yml(文件#1):
/home/user/app1$docker compose up-d
和另一个目录中的第二个文件
/home/user/app2$docker compose-f docker-compose-prod.yml up-d
以下是Dockerfile:
FROM ubuntu:trusty
MAINTAINER vendor
# Install base packages
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get -yq install \
curl \
apache2 \
libapache2-mod-php5 \
php5-mysql \
php5-mcrypt \
php5-gd \
php5-curl \
php-pear \
php5-memcache \
php-apc && \
rm -rf /var/lib/apt/lists/*
#ENV ALLOW_OVERRIDE **False**
RUN /usr/sbin/php5enmod mcrypt
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf && \
sed -i "s/variables_order.*/variables_order = \"EGPCS\"/g" /etc/php5/apache2/php.ini
# Add image configuration and scripts
ADD run.sh /run.sh
RUN chmod 755 /*.sh
# Configure /app folder with sample app
RUN mkdir -p /app && rm -fr /var/www/html && ln -s /app /var/www/html
WORKDIR /app
ADD . /app
RUN chmod 0777 -R /var/www/html/app/tmp
RUN ln -sf /dev/stderr /var/www/html/app/tmp/logs/error.log
RUN ln -sf /dev/stdout /var/www/html/app/tmp/logs/debug.log
RUN chown www-data:www-data /app -R
# should not be run inside container
#RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
#RUN /usr/local/bin/composer install
#RUN php vendor/bin/phinx migrate
EXPOSE 80
CMD ["/run.sh"]
和run.sh
#!/bin/bash
if [ "$ALLOW_OVERRIDE" = "**False**" ]; then
unset ALLOW_OVERRIDE
else
sed -i "s/AllowOverride None/AllowOverride All/g" /etc/apache2/apache2.conf
a2enmod rewrite
fi
source /etc/apache2/envvars
exec apache2 -D FOREGROUND
这是因为真的 模块重写已启用 为什么会发生这种情况? 创建容器时,
rewrite\u模块
被禁用。并run.sh
启用它。
稍后,停止(但不删除)容器,并再次运行它。但是每当容器启动时,run.sh
都会运行。和run.sh
正在尝试再次加载此模块,您将收到错误
您可以忽略错误,也可以修改run.sh
类似以下内容:
#!/bin/bash
if [ "$ALLOW_OVERRIDE" = "**False**" ]; then
unset ALLOW_OVERRIDE
else
sed -i "s/AllowOverride None/AllowOverride All/g" /etc/apache2/apache2.conf
if [! httpd -M | grep rewrite_module]; then
a2enmod rewrite;
fi;
fi
source /etc/apache2/envvars
apache2 -D FOREGROUND
我希望我能帮助你。我终于让它工作了 解决方案: #Apache对预先存在的PID文件感到不满 我在run.sh中添加了以下行:
rm-f/var/run/apache2/apache2.pid
看
和你能给我看一下
应用程序
图像的Dockerfile和entrypoint.sh吗?@BukharovSergey嗨,添加了Dockerfile和run.sh entrypoint.Hmm,这没用。我只看到“httpd(pid 1)已经运行”,但是容器退出了。好的,我们已经修复了第一个问题。尝试将exec apache2-D前台
替换为apache2-D前台
它将在我最终使其工作之前修复第二个问题。删除时描述的问题和解决方案#Apache对预先存在的rm-f/var/run/apache2/apache2.PID文件非常不满。感谢Sergey的快速响应!