我有index.php:
<?php
echo "Hello World";
?>
的Dockerfile
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”,但是我的应用程序在https://docs.docker.com/samples/library/php/为什么不起作用?
答案 0 :(得分:2)
创建简单的php脚本:
echo '<?php echo "Working";' > my.php
运行docker:
docker run -p 8080:8080 --rm -v $(pwd):$(pwd) php:7.4-cli php -S 0.0.0.0:8080 $(pwd)/my.php
在浏览器中打开:
http://localhost:8080/
答案 1 :(得分:1)
您可以保留与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
您所做的一切都是正确的,除了端口映射(-p 7000:80
)并不是必需的,因为您不需要运行Web服务器。
==编辑
如果要将其作为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脚本。
答案 2 :(得分:1)
如果您想使用php-cli
“即时”运行某些脚本,则可以创建容器并在脚本执行后立即将其删除。
只需转到包含代码的目录并运行:
Unix
docker container run --rm -v $(pwd):/app/ php:7.4-cli php /app/script.php
Windows-cmd
docker container run --rm -v %cd%:/app/ php:7.4-cli php /app/script.php
Windows-Power Shell
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
是创建容器后将执行的命令
答案 3 :(得分:0)
许多答案建议为此使用Apache,但这不是必需的。您需要使容器中的应用程序在特定端口上连续运行。您可以保留php:7.2-cli
图片,但您的CMD应该不同:
CMD [ "php", "-S 0.0.0.0:80", "./index.php" ]
这将运行内置的PHP网络服务器,然后您可以使用已经拥有的docker run命令公开它