当前位置: 首页 > 知识库问答 >
问题:

Docker:Apache2容器无法与php7通信。1个集装箱

姚树
2023-03-14

我在两个单独的容器中运行Apache2和PHP-FPM。两个容器运行正常,但我无法处理php文件。当我导航到一个php文件时,浏览器的响应是“找不到文件”查看apache错误日志,我得到:

[Fri Feb 01 09:50:54.894531 2019] [proxy_fcgi:error] [pid 8:tid 140041300997888] [client 44.82.126.19:65344] AH01071: Got error 'Primary script unknown\n'

主要是我一直遵循这里的设置说明。其他网站的搜索显示类似的设置。

我注意到这些指令不包括apache2 PHP模块,但fcgi似乎解决了这个问题。。。?

一些调试结果:

  • 我可以访问主机IP并呈现超文本标记语言网页。
  • 在Apache2容器内,我可以成功地ping PHP容器。所以内部网络正在工作。
  • 在PHP容器中,我可以成功地运行CLI PHP命令。
  • 我已经检查了PHP-FPM配置文件和Docker检查端口9000的暴露。一切都好。

docker撰写。yml:

version: '3.2'
volumes:
  apache2Config:
    external: true
  webContent:
    external: true
  databases:
    external: true

networks:
  frontend:
  backend:

services:
  php:
    build:
      context: './php7.1/'
      args:
        PHP_VERSION: ${PHP_VERSION}
    image: php7.1.26-fpm:1.0
    restart: always
    container_name: php
    networks:
      - backend
  web:
    build: ./apache2/
    image: apache2:1.0
    restart: always
    container_name: AOW_apache2Server
    depends_on:
      - php
      - mariadb
    networks:
      - frontend
      - backend
    expose:
     - "80"
     - "81"
     - "443"
     - "8083"
    ports:
     - "80:80/tcp"
     - "81:81"
     - "443:443"
     - "8083:8083"
    volumes:
      - apache2Config:/mnt/apache2Conf
      - webContent:/var/www
  mariadb:
    build: ./mariaDB/
    image: mariadb_10.4.0
    container_name: mariaDB_10.4.0
    networks:
      - backend
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=*****
    volumes:
      - databases:/var/lib/mysql

Apach2配置:

#ServerRoot "/etc/apache2"
ServerName aow

Mutex file:${APACHE_LOCK_DIR} default
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn mod_rewrite.c:trace2

# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# Include list of ports to listen on
Include ports.conf
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

#Allow access to the /usr/share directory. phpmyadmin is located in here.
<Directory /usr/share/phpmyadmin/>
        Order allow,deny
        Allow from all
        Require all granted
</Directory>

#Allow access to the www directory. Mediawiki source files are in here.
#Directory listing is disabled, but following symLinks is allowed.
<Directory /var/www/>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

AccessFileName .htaccess

<FilesMatch "^\.ht">
        Require all denied
</FilesMatch>

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent


# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

支持Apache2的mods:

Loaded Modules:
 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cache_module (shared)
 cache_disk_module (shared)

 deflate_module (shared)

 dir_module (shared)
 env_module (shared)
 expires_module (shared)
 file_cache_module (shared)
 filter_module (shared)
 headers_module (shared)
 macro_module (shared)
 mime_module (shared)
 mpm_event_module (shared)
 negotiation_module (shared)

 proxy_module (shared)
 proxy_fcgi_module (shared)

 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 status_module (shared)

000美元违约。配置文件内容:

<VirtualHost *:80>
    # Proxy .php requests to port 9000 of the php-fpm container
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/$1

    ServerAdmin <<REMOVED>>
    DocumentRoot /var/www

    LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

共有1个答案

鲜于高明
2023-03-14

这看起来像是一个访问问题。您是否确保PHP/FPM容器可以访问Apache指向的目录?

 类似资料:
  • > 我正试图弄清楚Kubernetes中的网络,尤其是多集装箱吊舱的处理。在我的简单场景中,我总共有3个豆荚。其中一个有两个容器,另一个只有一个容器,它希望与多容器吊舱中的特定容器通信。我想弄清楚kubernetes如何处理此类容器之间的通信。 为此,我在一个“sidecar体系结构”中有一个简单的多容器吊舱,YAML文件如下所示: > 我想用这个YAML文件实现的是,在pod“nginx”中,有

  • 我有两个项目,一个是aspnet核心API项目,另一个是xUnit e2e项目,两者都部署在两个不同的容器中。 一旦两个容器都启动并运行,e2e容器就会尝试在url上访问Web API项目的APIhttps://web-api-container:5010/.但e2e项目无法实现API项目。似乎无法使用其主机名访问API项目(http://web-api-container:5010/). 我的c

  • 问题内容: 我有一个Chrome容器(使用此Dockerfile部署),可应要求从App容器渲染页面。 基本流程是: 应用程序向Chrome发送了一个http请求,并作为响应接收了要使用的websocket网址(例如) 然后,应用程序使用该websocket网址与Chrome进一步通信,并接收呈现的页面。我正在使用puppeteer库通过以下方式连接到Chrome实例并与之通信: 对于单个Chro

  • 容器与外部网络通信 决定容器是否可以访问外网取决于两个因素: 主机是否会转发IP数据包。这取决于转发系统内的ip_forward这个参数的配置。如果ip_forward值为1,数据包就可以被转发。Docker会使用--ip_forward=true的默认设置,一旦你docker服务启动docker会将系统的ip_forward的值修改为1。使用-ip_forward=false对系统没有改变。通常

  • 问题内容: 我刚刚在xcode 6 beta中打开了现有项目。但是由于以下错误消息而崩溃。 xib在xcode beta上运行是否有任何解决方法? 问题答案: 这解决了Interface Builder问题。

  • 我是docker的新手。我在windows 10上使用docker for windows。我创建了一个docker容器应用程序(spring boot),该应用程序需要与rabbitmq通信-这也是在一个容器中。他们都使用相同的docker网络(默认网桥网络),但当我尝试连接到rabbitmq(端口5672)时,连接被拒绝。我使用的是容器IP(rabbitmq为172.17.0.2)。如果我在d