如何在 Docker 上运行 PHP 脚本?

2022-08-30 20:18:35

我有索引.php:

<?php
echo "Hello World";
?>

来自网站的 Dockerfile:https://docs.docker.com/samples/library/php/

FROM php:7.2-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./index.php" ]

我构建镜像并运行容器:

docker build -t my-php-app .
docker run -p 7000:80 --rm --name hello-world-test my-php-app

我只看到文本“Hello World”,但我的应用程序无法正常工作 http://localhost:7000/ 为什么?


答案 1

如果要“动态”运行某些脚本,可以创建容器并在脚本执行后立即将其删除。php-cli

只需转到包含代码的目录并运行:

Unix

docker container run --rm -v $(pwd):/app/ php:7.4-cli php /app/script.php

视窗 - 厘米

docker container run --rm -v %cd%:/app/ php:7.4-cli php /app/script.php

窗户-电源外壳

docker container run --rm -v ${PWD}:/app/ php:7.4-cli php /app/script.php

--rm执行后将删除容器

-v $(pwd):/app/将挂载当前目录

php:7.4-cli是图像

并且是将在创建容器后执行的命令php /app/script.php


答案 2

您可以保持与以下相同的基本映像:php:7.2-cli

FROM php:7.2-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./index.php" ]

构建映像:

docker build -t my-php-app .

运行它:

docker run --rm --name hello-world-test my-php-app

您将获得:

Hello World

您所做的一切都是正确的,除了端口映射(),这不是必需的,因为您不运行Web服务器。-p 7000:80

== 编辑

如果要将其作为 Web 服务器运行,请使用以下 Dockerfile:

FROM php:7.2-apache
COPY . /var/www/html/

构建它:

docker build -t my-php-app .

并运行它:

docker run -p 8080:80 -d my-php-app

然后,您将在8080上运行PHP脚本。


推荐