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.confinit.conf位于同一文件夹中,则在将它们复制到Mac OS X主机时,它们会发生冲突。