即使从初始化,docker-compose音量也是空的

时间:2017-02-22 15:31:11

标签: docker docker-compose dockerfile

我对docker很新,我尝试为不同的网站创建一个docker-compose图像。

除了我的卷外,一切都很好。

以下是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"

Anf这是我的泊坞文件:

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-compose在我的docker目录中创建卷(如果它不存在),并且如果它存在则使用该卷,如https://stackoverflow.com/a/39181484中的解释。但它似乎没有用。

1 个答案:

答案 0 :(得分:11)

问题是您希望Container中的文件安装在您的主机上

这不是它的工作方式:反之亦然:

Docker将您的主机文件夹安装在您指定的容器文件夹中。 如果你进入容器,你会看到应该有init文件的地方,什么都没有(或者你的主机文件夹中有什么),你可以在文件夹中写一个文件,它会出现在你的主人身上。

获取init文件并为容器修改它们的最佳选择是:

  • 创建容器而不安装文件夹(原始容器数据将在那里)
  • 运行容器(容器将在安装nginx之后将文件放在正确的位置......)docker run <image>
  • 使用docker cp <container>:<container_folder>/* <host_folder>
  • 将文件复制出容器
  • 现在你有了原作&#39;来自主机上容器init的文件。
  • 根据容器需要修改文件。
  • 运行装载主机文件夹的容器,其中包含新文件。

注意: 您可能希望使用shell(docker run -it <image> /bin/sh)进入容器内部并压缩所有文件夹,以确保在有嵌套文件夹的情况下获得所有内容,然后docker cp ...压缩文件

另外,请注意文件系统区分大小写:Linux文件区分大小写。在Mac OS X上,他们不是。因此,如果您在同一文件夹中有Init.confinit.conf,则在将它们复制到Mac OS X主机时会发生冲突。