当我使用Docker时,我直接在主机和容器之间绑定一个文件,但这两个文件无法同步



我用以下内容启动一个docker容器:

cd /root 
docker run -it -d --privileged=true --name nginx nginx 
rm -fr dockerdata 
mkdir dockerdata 
cd dockerdata 
mkdir nginx 
cd nginx 
docker cp nginx:/usr/share/nginx/html . 
docker cp nginx:/etc/nginx/nginx.conf . 
docker cp nginx:/etc/nginx/conf.d ./conf 
docker cp nginx:/var/log/nginx ./logs 
docker rm -f nginx 
cd /root 
docker run -it -d -p 8020:80 --privileged=true --name nginx 
-v /root/dockerdata/nginx/html:/usr/share/nginx/html 
-v /root/dockerdata/nginx/nginx.conf:/etc/nginx/nginx.conf 
-v /root/dockerdata/nginx/conf:/etc/nginx/conf.d 
-v /root/dockerdata/nginx/logs:/var/log/nginx 
nginx

";docker inspect nginx";如下

HostConfig绑定

绑定的目录可以同步,但直接绑定的文件如";nginx。conf";无法同步。当我修改";nginx。conf";在主机中;nginx。conf";在容器中不会发生变化

我想知道为什么会发生这种情况,以及如何在主机和容器之间直接绑定单个文件##

发生这种情况的原因

Mount-bind将文件装载到inode。nginx入口点在https://github.com/nginxinc/docker-nginx/blob/ed42652f987141da65bab235b86a165b2c506cf5/stable/debian/30-tune-worker-processes.sh:

sed -i.bak

sed创建一个新文件,然后将新文件移动到旧文件。文件的索引节点发生了更改,因此它不再是挂载的索引节点。

如何直接绑定

它是绑定的。相反,您应该考虑重新阅读nginxdocker容器文档,了解如何将自定义配置传递给它:

-v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro
^^^

在https://github.com/nginxinc/docker-nginx/blob/ed42652f987141da65bab235b86a165b2c506cf5/stable/debian/30-tune-worker-processes.sh#L12。

相关内容