【问题标题】:How to run Docker container with website and php?如何使用网站和 php 运行 Docker 容器?
【发布时间】:2020-04-09 04:06:55
【问题描述】:

我有一个登录页面和一个用于发送电子邮件的 PHP 文件(反馈表)。我想用 Docker 测试这个表单。

我已经编写了这个 Dockerfile:

FROM php:7.4-cli
COPY . /usr/src/app
CMD [ "php", "/mail/contact_me.php"]

但这对我不起作用。

我在项目的根目录中有包含 PHP 文件的目录 mail,但我仍然不确定 Dockerfile 是否正确:

  • 继承FROM php:7.4-cli就够了还是要加nginx服务器才能运行镜像?
  • COPY . /usr/src/app 行到底是做什么的?这是正确的吗?

【问题讨论】:

  • 你需要一个 Nginx 网络服务器和 php 容器。
  • 能否请您作为答案写下 Dockerfile 的外观?谢谢@invalidbot
  • 我已经编辑了您的问题,以便更好地理解和提高可读性。因此,我对您的文本进行了重组,以更多地关注您的问题(您的每个问题现在都是末尾的一个要点,而不是代码 sn-p 内)。如果您可以包含您收到的错误消息,那也很好。另请阅读how to ask a good question 并可能根据那里的建议编辑您的问题。

标签: php docker nginx


【解决方案1】:

Dockerfile 用于创建自定义图像。

FROM php:7.4-cli 指定您要自定义的基本映像
COPY . /usr/src/app主机当前目录. 复制到容器 /usr/src/app
CMD [ "php", "/mail/contact_me.php"] 指定要在容器中运行的命令。

在您的情况下,我认为不需要自定义图像。

由于您需要一个带有 PHP 的网络服务器,您可以使用预装了 PHP7Apache 网络服务器的 php:7.4.3-apache 图像。您需要做的就是将您的应用程序复制到您的容器中,或者使用一个卷。卷很棒,因为它实际上将您的主机目录挂载到您的容器中,允许您从主机编辑您的应用程序并实时查看更改。

您可以为此使用docker-compose.yml 文件。

version: "2"
services:
  webserver:
    image: php:7.4.3-apache
    ports:
      - "8181:80"
    volumes:
      - ./app:/var/www/html

假设您的应用程序位于主机上的 app 文件夹中,该文件夹将安装在容器上的 /var/html/html 处。这里8181:80会将主机上的8181端口重定向到容器的80端口,也就是http端口。

使用这个命令来启动你的容器:

docker-compose up -d

您应该在http://localhost:8181看到您的目标网页

【讨论】:

  • 所以“./app:”是我的项目文件夹吗?例如,我的项目是包含所有代码的“myproject”文件夹。所以我必须写“./myproject:/var/www/html”?
  • 我在 localhost:8181: Forbidden 你没有访问这个资源的权限。 Apache/2.4.38 (Debian) 服务器在 localhost 端口 8181
  • Here 是根据我发布的代码组织文件的方式。然后您可以在 localhost:8181/index.php 访问您的应用程序
【解决方案2】:

阅读 Dockerfile(官方文档):Best practices for writing Dockerfiles

并且 可能你需要另一个 Docker 镜像:Docker HUB ~> bitnami/php-fpme

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多