![](/img/trans.png)
[英]How to connect to a docker container from outside the host (same network) [Windows]
[英]babel-watch doesn't work from docker container on windows host when mounting a host directory as a network share
我在Windows上使用docker,我的src目录作为网络共享安装在docker容器内 (而不是COPY)。 因此docker中的/var/app/server
实际上是一个网络共享,其在我的主机上的实际位置是C:\\...project\\server
。 [旁注,我对docker在linux上的工作方式不熟悉,就像它还在使用网络共享在linux上挂载一样吗? 因为如果没有,那么这可能只是Windows问题]
我正在使用使用mkfifo
babel-watch,并且由于它在docker容器(VM)中运行,因此mkfifo无法在该网络共享目录中创建文件管道。 [旁注:babel-watch实际上可以通过具有mkfifo.exe实用程序的cygwin在docker外部的Windows上运行。
server_1 | mkfifo: cannot create fifo `/var/app/server/116521-16-pz2v9g.ma216skyb9': Operation not permitted
server_1 | Unable to create named pipe with mkfifo. Are you on linux/OSX?
有什么解决方法吗?
我尝试编辑babel-watch源,以使mkfifo在/var/app
或/var
创建文件(该文件仍将在docker容器的范围内),并且虽然mkfifo
实际上有效,但文件更改不会通天塔看。 我想从根本上说文件更改信息无法通过网络共享屏障- /var/app/server
(挂载点)传播到/var/app
(泊坞窗内的真实目录)。
mkfifo
需要Linux / OSX环境,而/var/app/server
是从Windows挂载的。 因此它不起作用。 因此,您应该ADD
或COPY
而不是挂载卷
我最近遇到了这个问题,做了一些挖掘。
如果查看babel-watch源文件 (在撰写本文时),您会看到它尝试在OS的临时目录中创建命名管道。
function generateTempFilename() {
const now = new Date();
return path.join(os.tmpdir(), [
now.getYear(), now.getMonth(), now.getDate(),
'-',
process.pid,
'-',
(Math.random() * 0x100000000 + 1).toString(36),
].join(''));
}
在我们的Docker容器中,未设置$TMPDIR
,这导致在当前工作目录中创建命名管道。 对其进行设置将更改:
TEMP_DIR=/tmp babel-watch index.js
这意味着mkfifo
调用未针对Windows文件系统。 但是,这不能解决Windows文件系统上未选择更改的问题。 要检测更改,可以使用轮询标志--use-polling
。 这使命令:
TEMP_DIR=/tmp babel-watch --use-polling index.js
将这两者结合使用,使我们能够从Windows版Docker中的Docker容器中使用babel-watch。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.