应该没有区别,一个卷正在将本地目录挂载到容器中的目录。要么您没有正确安装,要么您在 nginx 容器内安装了不正确的路径(nginx 不使用的路径)。
根据https://docs.docker.com/samples/library/nginx/ 上的官方 nginx docker 镜像文档,您应该挂载到 /usr/share/nginx/html
$ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
此外,我会在您的 docker-compose.yaml 中包含完整路径:
volumes:
- /full_path/volumes/nginx/data:/usr/share/nginx/html
如果这仍然不起作用,您应该执行到容器中并确认目录已安装:
$ docker exec -it <container_name> sh
$ df -h | grep nginx
# write data, confirm you see it on the docker host's directory
$ cd /usr/share/nginx/html
$ touch foo
# on docker host
$ ls /full_path/volumes/nginx/data/foo
如果其中任何一个失败,我会查看 docker 日志以查看挂载目录是否存在问题,可能是路径或权限问题。
$ docker logs <container_name>
--- 更新 ---
我运行了您正在使用的所有内容,并且效果很好:
$ cat Dockerfile
FROM nginx
RUN touch /usr/share/nginx/html/test1234 && ls /usr/share/nginx/html/
$ docker build -t nginx-image-test .; docker run -p 8889:80 --name some-nginx -v /full_path/test:/usr/share/nginx/html:rw -d nginx-image-test; ls ./test;
...
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
33ccbea6c1c1 nginx-image-test "nginx -g 'daemon of…" 4 minutes ago Up 4 minutes 0.0.0.0:8889->80/tcp some-nginx
$ cat test/index.html
hello world
$ curl -i http://localhost:8889
HTTP/1.1 200 OK
Server: nginx/1.15.3
Date: Thu, 06 Sep 2018 15:35:43 GMT
Content-Type: text/html
Content-Length: 12
Last-Modified: Thu, 06 Sep 2018 15:31:11 GMT
Connection: keep-alive
ETag: "5b91483f-c"
Accept-Ranges: bytes
hello world
-- 更新 2 --
真棒你想通了,这篇文章似乎解释了为什么:
docker data volume vs mounted host directory
主机目录本质上是依赖于主机的。出于这个原因,您不能从 Dockerfile 挂载主机目录,因为构建的图像应该是可移植的。主机目录不会在所有潜在主机上都可用。
如果您想要在容器之间共享一些持久性数据,或者想从非持久性容器中使用,最好创建一个命名的数据卷容器,然后从其中挂载数据。