我的PHP Docker容器没有处理文件,而是返回了源代码。
正在返回而不是执行以下内容:
<?php
phpinfo();
?>
docker ps
的输出,以显示两个my容器都在各自的端口上运行和侦听:
dan@server:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5e235112a35 php:7.2-fpm "docker-php-entrypoi…" 23 minutes ago Up 23 minutes 0.0.0.0:9000->9000/tcp php
2196a8f251d3 httpd "httpd-foreground" 5 days ago Up 33 seconds 0.0.0.0:80->80/tcp apache
Virtualhost配置,请注意将PHP传递到容器的FilesMatch
指令。
<Directory /usr/local/apache2/htdocs/default>
Options -Indexes
AllowOverride All
Require all granted
</Directory>
<VirtualHost 192.168.2.35:80>
ServerName localhost
ServerAdmin webmaster@localhost
DocumentRoot /usr/local/apache2/htdocs/default
<FilesMatch \.php$>
SetHandler "proxy:fcgi://php:9000"
</FilesMatch>
LogLevel trace1
ErrorLog logs/error.default.ca.log
CustomLog logs/access.default.ca.log combined
</VirtualHost>
Apache日志,显示文件由Apache提供服务。
192.168.2.30 - - [22/Dec/2018:02:40:49 +0000] "GET /default/index.php HTTP/1.1" 200 24
编辑
我试图在不同的容器中运行Apache、PHP和MariaDB。我首先运行Apache,现在,我试图附加PHP。
最后,我想添加Nextcloud,该IIRC有一个没有Apache的容器,我可以重用现有的容器。
我的PHP Dockerfile
FROM php:7.2-fpm
RUN buildDeps=" \
libmcrypt-dev \
default-libmysqlclient-dev \
libjpeg-dev \
libldap2-dev \
libmemcachedutil2 \
libpng-dev \
libpq-dev \
libxml2-dev \
" \
&& apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y $buildDeps $runtimeDeps \
&& pecl install mcrypt-1.0.1 && docker-php-ext-enable mcrypt.so \
&& docker-php-ext-install bcmath bz2 calendar iconv json intl mbstring mysqli opcache pdo_mysql soap zip \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd \
&& apt-get purge -y --auto-remove $buildDeps \
&& rm -r /var/lib/apt/lists/*
首先,请注意,Apache的官方PHP映像使用/var/www/html
作为其默认webroot(请参阅映像文档)
您案例中的问题可能是因为您基于IP地址定义了virtualhost;
<VirtualHost 192.168.2.35:80>
当docker启动一个容器时,容器在内部(容器-容器)网络上被分配一个随机的IP地址。此IP地址与主机的IP地址不匹配,并且容器配置不应该依赖于IP地址(因为它会在容器启动时更改,如果您运行容器的多个实例,每个实例都将获得自己的IP地址)...
容器不是虚拟机,通常将处理单个服务/网站。假设您的容器将运行一个网站/虚拟主机,在这种情况下,您可以使用与默认配置相同的配置:
<VirtualHost *:80>
如果不需要特殊配置,则可以使用映像的默认配置,在这种情况下,这将起作用:
创建您的index.php
cat > ./index.php -<<'EOF'
<?php
phpinfo();
?>
EOF
创建Dockerfile;
cat > ./Dockerfile -<<'EOF'
FROM php:7.3-apache
COPY index.php /var/www/html/
EOF
建立您的形象:
docker build -t mywebsite .
启动容器;将容器的端口80映射到主机上的端口4000;
docker run -d -p 4000:80 --name mywebsite-container mywebsite
在浏览器中检查输出,或使用curl
:
curl http://localhost:4000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css">
body {background-color: #fff; color: #222; font-family: sans-serif;}
.....
我开始做一些类似资源类的东西,在那里我可以为我的应用程序保存我所有的文件,像图像和声音,但它变得非常混乱,所有的东西都在应用程序的乞求中加载。 这是包含所有内容的类:https://sourceb.in/s8rjgqqgss(头文件)https://sourceb.in/cjiq78hdov(cpp文件的一部分) 我很抱歉把它贴在不同的网站上,但正如你所看到的,它真的很乱,我也不知道如何让它变得更
我目前正在开发Jersey/Hibernate web服务(在Tomcat 9容器中),它应该能够使用和生成JSON(应用程序/JSON)和XML(应用程序/XML)。它支持GET和POST来使用这些类型。DELETE是受支持的,并且可以工作,对于JSON,GET和POST也是如此。但是,当我尝试使用XML内容类型时,我得到了一个500内部服务器错误。 结构如下:(检查下面的代码)歌曲列表(son
问题内容: 在我将其添加到本地服务器的文档根目录中的.htaccess文件之前,一切都进行得很好(我经常根据所使用的站点对其进行更改)。自从我这样做后,当我访问http:// localhost:8888时, 我的浏览器只下载index.php,而根本不处理它,而只处理原始代码。现在, 我从.htaccess文件中删除了该行,但仍然遇到此问题 。 我发现,如果我将127.0.0.1的替代条目添加到
我在docker中有两个服务后端和前端(nodejs),它们通过nginx(也在docker中)处理。 Nginx配置: 我使用nginx location将所有请求代理给
grep用于在文件内搜索,查看是否有任何行与给定的正则表达式匹配。然而,我有这种情况--我想编写一个将与文件名本身(而不是文件内容)匹配的正则表达式。我将从系统的根目录运行它,以找到所有与正则表达式匹配的文件。
很多 .NET 类提供两种方式处理系统事件。你可以附加指定一个事件处理器或者重载基类的虚函数。为什么提供两种方式做同一件事情?因为不同的情况需要不同的解决方案,这就是为什么。在子类中,你总可以重载虚函数。这样不相关对象就不能使用这个事件处理器。你可以写的一个漂亮的 Windows Presentation Foundation (WPF) 应用,需要响应鼠标按下事件。在你的 Form 类中,你可以