我对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"
这是我的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-compose在我的docker目录中创建卷(如果它不存在),并且如果它存在则使用该卷,如https://stackoverflow.com/a/39181484中的解释。但它似乎不起作用。
问题是您希望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主机时会发生冲突。