首页 > 解决方案 > 当我使用绑定挂载时 Docker 容器退出(简单的 php/apache 设置)

问题描述

我只是想用 docker 弄湿我的脚,我想构建一个简单的 PHP/apache 页面。

我的项目只是一个包含 Dockerfile 的文件夹和一个名为 php 的文件夹,其中包含 index.php。

我的 dockerfile 很简单:

FROM php:8.0.3-apache-buster
COPY ./php /var/www/html/

目标只是能够查看 index.php,进行更改,并在我刷新浏览器时查看更改。

docker build -t my-image .我使用我的项目目录构建图像。

如果我运行该命令docker run -p 8080:80 -it my-image,那么我可以在浏览器的 localhost:8080 中查看 index.php 的内容。到目前为止,一切都很好。

现在我只想将我的本地文件夹绑定到容器以查看我的更改,因此我将命令更改为:

docker run -p 8080:80 -it my-image -v "$(pwd)/php:/var/www/html"

有趣的是,容器只输出一些信息代码并在一秒钟后退出。我该如何解决这个问题,作为奖励,当我在 docker 上时,什么是调试此类问题的好方法?

编辑:我忘了提到我在 MacOS Catalina 上。

标签: docker

解决方案


请尝试以下语法:

docker run -p 8080:80 -it -v "$(pwd)"/blah:/var/www/html my-image

注意图像名称是如何排在最后的。

或者,因为 Docker 维护人员大多数用户发现mount语法更直观(我倾向于同意):

docker run -p 8080:80 -it --mount type=bind,source="$(pwd)"/blah,target=/var/www/html my-image

你原来的咒语是这样的:你(-i)交互式地,(-t),打开一个 tty,(docker run ... my-image)运行一个容器,它是你的图像的一个实例my-image,(-p 8080:80)你的端口转发设置,和在命令的最后部分覆盖my-image的正常入口点(入口点可能是启动知道如何运行 php 的 apache 服务器的东西)。my-image认为它应该运行 -v "$(pwd)/php:/var/www/html"而不是正常的 apache 服务器,这是荒谬的,不是你想要的。


推荐阅读