Docker 绑定安装 - 无法在浏览器上看到更改
Docker bound mount - can not see changes on browser
我在 windows 家里使用 docker-工具箱。
我能够 运行 一个 jekyll-serve 网络服务器图像来查看浏览器上的默认页面,但是当我尝试在 VS Code 上编辑文件时,刷新浏览器后我看不到更改。
知道为什么刷新后我看不到变化吗?
重现步骤:
首先,我 git 将此 repository 克隆到我的 c:/Users/shaharshokrani/udemy-docker-mastery/bind-mount-sample1
中(我能够在 'cmder' 控制台上看到带有 ls
的文件).
然后我可以 运行 这个 image 有:
docker run -v //c/users/shaharshokrani/udemy-docker-mastery/bindmount-sample-1:/site bretfisher/jekyll new .
docker container run -p 80:4000 --name myjekyll -v //c/users/shaharshokrani/udemy-docker-mastery/bindmount-sample-1:/site bretfisher/jekyll-serve
而且我可以在 http://192.168.99.100/
上看到默认的欢迎页面。
我尝试使用 VS Code 编辑和保存这个 2017-03-05-welcome-to-jekyll.markdown
但是刷新浏览器后我看不到更改。
我还检查了 VM 的共享网络 - 它显示 c:/users/
。
即使 Mounts
检查看起来也不错:
"Mounts": [
{
"Type": "bind",
"Source": "/c/users/shaharshokrani/udemy-docker-mastery/bindmount-sample-1",
"Destination": "/site",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
并且图像 dockerfile 的 CMD
具有 --force_polling
标志。
两张图片(bretfisher/jekyll-serve
、bretfisher/jekyll
)都是最新的。
docker container logs -f myjekyll
看起来不错:
Bundle complete! 4 Gemfile dependencies, 28 gems now installed.
Bundled gems are installed into `/usr/local/bundle`
Configuration file: /site/_config.yml
Source: /site
Destination: /site/_site
Incremental build: disabled. Enable with --incremental
Generating...
Jekyll Feed: Generating feed for posts
done in 1.031 seconds.
Auto-regeneration: enabled for '/site'
Server address: http://0.0.0.0:4000/
Server running... press ctrl-c to stop.
Docker版本:
Client:
Version: 18.03.0-ce
API version: 1.37
Go version: go1.9.4
Git commit: 0520e24302
Built: Fri Mar 23 08:31:36 2018
OS/Arch: windows/amd64
Experimental: false
Orchestrator: swarm
Server: Docker Engine - Community
Engine:
Version: 19.03.3
API version: 1.40 (minimum version 1.12)
Go version: go1.12.10
Git commit: a872fc2f86
Built: Tue Oct 8 01:01:20 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
已确定问题
绑定安装实际上不适用于 docker 工具箱:
file change events in mounted folders of host are not propagated to
container by Docker for Windows
解决方案
此脚本旨在解决此问题:docker-windows-volume-watcher。
旁注
这是在容器外操作数据的常见问题。
特别是对于 jekyll,即使下面问题中描述的解决方案也不适用于基于 windows 的系统。
https://github.com/jekyll/jekyll-watch/issues/17
简而言之,您需要使用 --force_polling
标志执行 jekyll(不适用于 Windows Hosts)。您可以在此处的 jekyll 文档中找到它
https://jekyllrb.com/docs/configuration/options/
在基于 Linux 的系统上它开箱即用,因为问题 bretfisher/jekyll-serve
中使用的图像已经使用了 --force_polling
标志。
只是 运行
docker run --rm -it -e JEKYLL_NEW=true -p 8080:4000 -v (pwd):/site bretfisher/jekyll new .
创建一个新的 Jekyll 站点和
docker run --rm -it -e JEKYLL_NEW=true -p 8080:4000 -v (pwd):/site bretfisher/jekyll-serve
到 运行 它挂载到我机器上的一个目录 (linux) 并且能够编辑一个文件并将更改传播到 jekyll。
我在 windows 家里使用 docker-工具箱。 我能够 运行 一个 jekyll-serve 网络服务器图像来查看浏览器上的默认页面,但是当我尝试在 VS Code 上编辑文件时,刷新浏览器后我看不到更改。
知道为什么刷新后我看不到变化吗?
重现步骤:
首先,我 git 将此 repository 克隆到我的 c:/Users/shaharshokrani/udemy-docker-mastery/bind-mount-sample1
中(我能够在 'cmder' 控制台上看到带有 ls
的文件).
然后我可以 运行 这个 image 有:
docker run -v //c/users/shaharshokrani/udemy-docker-mastery/bindmount-sample-1:/site bretfisher/jekyll new .
docker container run -p 80:4000 --name myjekyll -v //c/users/shaharshokrani/udemy-docker-mastery/bindmount-sample-1:/site bretfisher/jekyll-serve
而且我可以在 http://192.168.99.100/
上看到默认的欢迎页面。
我尝试使用 VS Code 编辑和保存这个 2017-03-05-welcome-to-jekyll.markdown
但是刷新浏览器后我看不到更改。
我还检查了 VM 的共享网络 - 它显示 c:/users/
。
即使 Mounts
检查看起来也不错:
"Mounts": [
{
"Type": "bind",
"Source": "/c/users/shaharshokrani/udemy-docker-mastery/bindmount-sample-1",
"Destination": "/site",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
并且图像 dockerfile 的 CMD
具有 --force_polling
标志。
两张图片(bretfisher/jekyll-serve
、bretfisher/jekyll
)都是最新的。
docker container logs -f myjekyll
看起来不错:
Bundle complete! 4 Gemfile dependencies, 28 gems now installed.
Bundled gems are installed into `/usr/local/bundle`
Configuration file: /site/_config.yml
Source: /site
Destination: /site/_site
Incremental build: disabled. Enable with --incremental
Generating...
Jekyll Feed: Generating feed for posts
done in 1.031 seconds.
Auto-regeneration: enabled for '/site'
Server address: http://0.0.0.0:4000/
Server running... press ctrl-c to stop.
Docker版本:
Client:
Version: 18.03.0-ce
API version: 1.37
Go version: go1.9.4
Git commit: 0520e24302
Built: Fri Mar 23 08:31:36 2018
OS/Arch: windows/amd64
Experimental: false
Orchestrator: swarm
Server: Docker Engine - Community
Engine:
Version: 19.03.3
API version: 1.40 (minimum version 1.12)
Go version: go1.12.10
Git commit: a872fc2f86
Built: Tue Oct 8 01:01:20 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
已确定问题
绑定安装实际上不适用于 docker 工具箱:
file change events in mounted folders of host are not propagated to container by Docker for Windows
解决方案
此脚本旨在解决此问题:docker-windows-volume-watcher。
旁注
这是在容器外操作数据的常见问题。
特别是对于 jekyll,即使下面问题中描述的解决方案也不适用于基于 windows 的系统。
https://github.com/jekyll/jekyll-watch/issues/17
简而言之,您需要使用 --force_polling
标志执行 jekyll(不适用于 Windows Hosts)。您可以在此处的 jekyll 文档中找到它
https://jekyllrb.com/docs/configuration/options/
在基于 Linux 的系统上它开箱即用,因为问题 bretfisher/jekyll-serve
中使用的图像已经使用了 --force_polling
标志。
只是 运行
docker run --rm -it -e JEKYLL_NEW=true -p 8080:4000 -v (pwd):/site bretfisher/jekyll new .
创建一个新的 Jekyll 站点和
docker run --rm -it -e JEKYLL_NEW=true -p 8080:4000 -v (pwd):/site bretfisher/jekyll-serve
到 运行 它挂载到我机器上的一个目录 (linux) 并且能够编辑一个文件并将更改传播到 jekyll。