Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php build:创建的映像中的Docker容器正在工作,但在拉取映像中不工作 我已经用apache为我的应用程序构建了一个映像,用它创建的容器工作得很好。我可以在localhost上看到该页面。(文件#1:docker compose.yml) 我将图像推送到docker hub_Php_Apache_Docker_Containers_Docker Compose - Fatal编程技术网

Php build:创建的映像中的Docker容器正在工作,但在拉取映像中不工作 我已经用apache为我的应用程序构建了一个映像,用它创建的容器工作得很好。我可以在localhost上看到该页面。(文件#1:docker compose.yml) 我将图像推送到docker hub

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:

我为同一个应用程序使用另一个(文件#2:docker-compose-prod.yml)重新创建了一个容器,它立即退出,没有任何错误,容器输出为:

模块重写已启用 httpd(pid 1)已在运行

下面是docker-compose.yml文件#1中描述的应用程序服务,我用于构建:

 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的快速响应!