Bre*_*ntg 15 docker dockerfile docker-compose
我正在尝试我的第一步到Docker,所以我尝试制作一个Dockerfile,创建一个简单的index.html和一个目录图像(见下面的代码)
然后我运行docker-compose build来创建映像,并使用docker-compose-up来运行服务器.但我没有文件index.html或文件夹图像.
这是我的Dockerfile:
FROM php:apache
MAINTAINER brent@dropsolid.com
WORKDIR /var/www/html
RUN touch index.html \
&& mkdir images
Run Code Online (Sandbox Code Playgroud)
这是我的docker-compose.yml
version: '2'
services:
web:
build: .docker/web
ports:
- "80:80"
volumes:
- ./docroot:/var/www/html
Run Code Online (Sandbox Code Playgroud)
我希望这会创建一个带有图像目录和index.html的docroot文件夹,但我只获得了docroot.
Dan*_*owe 21
Dockerfile包含有关如何构建映像的说明.您从该Dockerfile构建的映像确实包含index.html
和images/
.
在运行时,您从您构建的映像创建了一个容器.在该容器中,您将外部目录挂载./docroot
为/var/www/html
.
挂载将隐藏之前在该路径上的任何内容,因此此挂载将隐藏先前的内容/var/www/html
,用其中的任何内容替换它们./docroot
.
在你问的评论中
是否有可能首先挂载然后创建文件或东西?或者这是不可能的?
您完成工作的方式是挂载在原始文件上,因此创建容器后将无法再访问它们.
有几种方法可以解决这个问题.
如果将这些文件放在图像中的其他路径中,则它们不会被装载覆盖.
WORKDIR /var/www/alternate-html
RUN touch index.html \
&& mkdir images
WORKDIR /var/www/html
Run Code Online (Sandbox Code Playgroud)
现在,在运行时,您仍将使用此挂载/var/www/html
,它将包含外部目录中的内容.哪个可能是也可能不是空目录.您可以在启动时告诉容器运行脚本并将其复制到那里,如果这是您想要的.
COPY entrypoint.sh /entrypoint.sh
RUN chmod 0755 /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
(假设您没有定义的入口点 - 如果您这样做,您可能只需要调整现有的脚本.)
entrypoint.sh:
#!/bin/sh
cp -r /var/www/alternate-html/* /var/www/html
exec "$@"
Run Code Online (Sandbox Code Playgroud)
这将运行cp
命令,然后将控制权交给CMD
此图像的任何内容.
您还可以选择在./docroot
外部预填充所需的文件.然后,当容器启动时,它们将在那里并添加目录mount.
归档时间: |
|
查看次数: |
30693 次 |
最近记录: |