Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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 在apache docker容器中运行虚拟主机_Php_Laravel_Apache_Docker - Fatal编程技术网

Php 在apache docker容器中运行虚拟主机

Php 在apache docker容器中运行虚拟主机,php,laravel,apache,docker,Php,Laravel,Apache,Docker,我在同一个apache容器中有两个php应用程序,我试图在一个端口上运行其中一个,因为它需要通过根域而不是子文件夹进行访问 我想在端口8060上运行应用程序,我已经尝试使用apache虚拟主机来运行该应用程序,但它不会加载页面,只是说连接被拒绝。但是,正常的根ip-工作正常。 我的docker文件如下 version: '3.2' services: php-apache: build: context: ./apache-php ports:

我在同一个apache容器中有两个php应用程序,我试图在一个端口上运行其中一个,因为它需要通过根域而不是子文件夹进行访问

我想在端口8060上运行应用程序,我已经尝试使用apache虚拟主机来运行该应用程序,但它不会加载页面,只是说连接被拒绝。但是,正常的根ip-工作正常。 我的docker文件如下

version: '3.2'
  services:
    php-apache:
      build:
        context: ./apache-php
      ports:
        - 80:80
        - 8060:8060

      expose:
        - '8060'
      volumes:
        - ./DocumentRoot:/var/www/html:z
我的apache配置

<VirtualHost *:60>
    DocumentRoot /var/www/html/api
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
非常感谢您的帮助。

由于我发现了问题,我在apache配置的顶部添加了listen指令,并更改了端口号

docker-compose.yml

version: '3.2'
services:
  php-apache:
    build:
      context: ./apache-php
    ports:
      - 80:80
      - 8060:8060

    volumes:
      - ./DocumentRoot:/var/www/html:z
Apache配置

Listen 80
Listen 8060

<VirtualHost *:8060>
    DocumentRoot /var/www/html/api
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Dockerfile

FROM php:7.2.1-apache
RUN docker-php-ext-install pdo pdo_mysql mysqli

# Enable apache rewrite
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf

#Install spatialite and create symlink for libproj.so.0
COPY sqlite3_ext /etc/sqlite3_ext
RUN apt-get update && apt-get -y install gdal-bin
RUN ln -s /usr/lib/x86_64-linux-gnu/libproj.so.12 /usr/lib/x86_64-linux-gnu/libproj.so.0

#Install gd library for images
RUN apt-get install libpng-dev libfreetype6-dev libjpeg62-turbo-dev -qy \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install gd

#Copy php ini
COPY php.ini /usr/local/etc/php/php.ini
RUN a2enmod rewrite

以下是一个解决方案-逐步:

步骤1: 在docker-compose.yml中添加/更新额外的_主机、主机名、域名和地址,在我的例子中,我通过端口80运行它。 这就是我的php服务在docker-compose.yml文件中的样子

步骤2: 使用以下行更新主机文件:

127.0.0.1 lara.local
步骤3:通过运行以下命令测试主机名

docker exec -it <your-php-container-name> hostname
步骤5:启动服务并检查应用程序是否正在运行http://lara.local

注意:如果您使用的是不同的端口,例如8080,那么它将是http://lara.local:8080

另外,如果您想更改DocumentRoot,那么ssh到您的容器并 cd/etc/apache2/sites available/000-default.conf,并根据需要更改DocumentRoot路径


VirtualHost块与端口不匹配:块;我认为在Apache配置中还需要一个Listen指令。expose:块是多余的。这与PHP、Laravel或Docker有什么关系?请不要使用不必要的tags@NicoHaase我明白你的意思,但答案可能与任何标签无关,但这是一个运行Php Laravel的docker容器,我不知道问题与此直接相关。先生,docker真的不知道。你能一步一步地帮我安装虚拟主机吗?@AsadKhan您可以向我提供有关您尝试设置的docker容器类型的详细信息。先生,我已添加了文件夹名vhost docker file位于vhost文件夹中。vhost为我的域提供了另一个文件夹名www。在哪里放置apache配置file@AsadKhan不确定docker的设置是什么,但我有一个由context引用的docker文件:./apache php,在我的docker compose.yml中,正如您在上面看到的那样。然后,在我的Dockerfile中,我在上面第5行添加了一个命令,用默认的apache配置替换我的定制apache配置。我已经更新了我的答案,希望这会有所帮助。@AsadKhan我对magento不是很熟悉,但它仍然在apache上运行,所以我想看看这篇文章。使用上面的代码复制apache配置,它可能不会被称为000-default.conf,但是如果您登录到容器并查看/etc,您应该能够在apache文件夹中找到它的名称。在我的情况下,步骤3没有按照您建议的顺序工作。对我来说,第3步需要在第5步之后执行,而且还必须使用docker compose而不是docker。因此,该命令是docker compose exec主机名
127.0.0.1 lara.local
docker exec -it <your-php-container-name> hostname
docker-compose build
docker-compose up -d