docker构成卷甚至从初始化是空的
我对docker工人来说很新颖,我尝试为不同的网站创build一个docker合成图像。
除了我的卷以外,一切正常。
这是一个docker-compose的例子:
version: '2' services: website: build: context: ./dockerfiles/ args: MYSQL_ROOT_PASSWORD: mysqlp@ssword volumes: - ./logs:/var/log - ./html:/var/www - ./nginx:/etc/nginx - ./mysql-data:/var/lib/mysql ports: - "8082:80" - "3307:3306"
这里是我的docker文件:
FROM php:5.6-fpm ARG MYSQL_ROOT_PASSWORD RUN export DEBIAN_FRONTEND=noninteractive; \ echo mysql-server mysql-server/root_password password $MYSQL_ROOT_PASSWORD | debconf-set-selections; \ echo mysql-server mysql-server/root_password_again password $MYSQL_ROOT_PASSWORD | debconf-set-selections; RUN apt-get update && apt-get install -y -q mysql-server php5-mysql nginx wget EXPOSE 80 3306 VOLUME ["/var/www", "/etc/nginx", "/var/lib/mysql", "/var/log"]
一切正常,预计我的主机卷中的所有文件夹都是空的。 我想看到我的文件夹中的nginx conf和mysl数据。
我究竟做错了什么?
谢谢你的帮助。
编辑1:其实问题是,我想要docker组成创build在我的docker目录中的卷,如果它不存在,并使用这个卷,如果它存在,因为它是解释在https://stackoverflow.com/a/ 39181484 。 但似乎没有工作。
问题是, 您希望将容器中的文件装载到主机上 。
这不是它的工作方式:反过来:
Docker将您的主机文件夹安装在您指定的容器文件夹中 。 如果你进入容器,你会看到哪里应该是init文件,什么都没有(或者你的主机文件夹中的东西),你可以在文件夹中写一个文件,它会出现在你的主机上。
获取init文件并为你的容器修改它们的最佳方法是:
- 创build一个没有安装文件夹的容器(原始容器数据将在那里)
- 运行容器(容器将在nginx等安装的位置的正确位置的文件…)
docker run <image>
- 使用
docker cp <container>:<container_folder>/* <host_folder>
将容器复制出docker cp <container>:<container_folder>/* <host_folder>
- 现在,您的主机上的容器init具有“原始”文件。
- 根据需要修改容器的文件。
- 运行安装主机文件夹的容器,其中包含新文件。
注意:你可能想要进入shell的容器( docker run -it <image> /bin/sh
),然后压缩所有的文件夹,以确保你得到了所有的东西,如果有嵌套的文件夹,然后docker cp ...
zip文件
另外,要小心文件系统区分大小写:在Linux文件区分大小写。 在Mac OS X上,他们不是。 因此,如果Init.conf
和init.conf
位于同一文件夹中,则在将它们复制到Mac OS X主机时,它们会发生冲突。