docker - 当我使用绑定挂载时 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 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 服务器,这是荒谬的,不是你想要的。
推荐阅读
- python - Beautifulsoup 创建新的标签功能
- nim-lang - 如何在 Nim 中编写宏 list.findBy(key, value)?
- python - 容器化 Azure 函数 - 从 Dockerfile 更改 AzureWebJobsScriptRoot 变量
- python - Buildozer 无法构建 apk
- git - git从哈希创建分支而不获取
- html - 如何在链接下方的左侧而不是右侧开始超级菜单
- zapier - Zapier 从具有多个分隔符的文本行中提取国家代码
- css - Storybook 仅加载 Emotion Styling 第一次加载
- android - 对 LiveData 使用 setValue 而不是 PostValue
- javascript - 使用类型脚本根据数组中的某些项过滤两个数组