我对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中的解释。但它似乎没有用。
答案 0 :(得分:11)
问题是您希望Container中的文件安装在您的主机上。
这不是它的工作方式:反之亦然:
Docker将您的主机文件夹安装在您指定的容器文件夹中。 如果你进入容器,你会看到应该有init文件的地方,什么都没有(或者你的主机文件夹中有什么),你可以在文件夹中写一个文件,它会出现在你的主人身上。
获取init文件并为容器修改它们的最佳选择是:
docker run <image>
docker cp <container>:<container_folder>/* <host_folder>
注意:
您可能希望使用shell(docker run -it <image> /bin/sh
)进入容器内部并压缩所有文件夹,以确保在有嵌套文件夹的情况下获得所有内容,然后docker cp ...
压缩文件
另外,请注意文件系统区分大小写:Linux文件区分大小写。在Mac OS X上,他们不是。因此,如果您在同一文件夹中有Init.conf
和init.conf
,则在将它们复制到Mac OS X主机时会发生冲突。