码头构建的纱线警告

wes*_*der 17 docker yarnpkg

yarn install我的docker容器内运行时,它会发出关于没有连接的警告. https://hub.docker.com/r/tavern/rpg-web/~/dockerfile/

warning You don't appear to have an internet connection. Try the --offline flag to use the cache for registry queries.

可能是什么导致了这个?

Not*_*ese 16

由于您的Dockerfile具有行读数RUN yarn(即不使用纱线的离线选项),因此纱线会尝试确定互联网是否可能自动可用而不发送任何数据包.

纱线如何检查在线状态?

这是通过使用节点来枚举docker builder上下文中的可用网络接口来完成的os.networkInterfaces(),这将在此处记录.

这反过来调用GetInterfaceAddresseslibuv支持的uv_interface_addresses.libuv函数仅返回分配了IP地址IFF_UPIFF_RUNNING设置了标志的接口.

要查看哪些地址实际返回到Javascript代码,您可以暂时将此行添加到Dockerfile:

RUN node -e 'const os = require("os"); const interfaces = os.networkInterfaces(); for (const interface in interfaces) {console.log(interface); const addrs = interfaces[interface]; for (const addr of addrs) {console.log(addr.address)}}'

至少在我的情况下,这只返回了回送地址,在1中明确忽略了纱线:

lo 127.0.0.1 ::1

但是ifconfig在docker图像中运行也显示了一个eth0界面.在HWaddr这个界面相匹配的的docker0机器上运行接口泊坞窗守护进程.这表明构建器上下文与docker bridge网络一起运行.

那么从libuv列表中排除桥接网络的标准是什么?

就我而言,docker网络没有设置IFF_RUNNING.这并不奇怪,因为Linux文档说这个字段是为了向后兼容.

要在您的实例中验证这种情况,您可以在本文档中使用稍微修改过的示例程序版本,在第一次printf()调用后添加此代码:

printf("RUNNING: %s", (ifa->ifa_flags & IFF_RUNNING) ? "TRUE" : "FALSE");

为什么码头设置不合适IFF_RUNNING

设置接口标志是docker不处理自身的低级操作.Docker的libnetwork 在这里委托给netlink库,但netlink只设置IFF_UP.

怎么修好?

这个问题的相关活动部分是开源的!

netlink被更改为暴露IFF_RUNNING以供阅读 - 有可能通过进一步更改为netlink来启用libnetwork(以及docker)来设置该标志.

或者,可以在关于该主题Github问题之后扩展libuv .这样的新API最终可以用在node.js和yarn中,无论分配的IP地址和IFF_RUNNING状态如何,都会列出接口.

  • 有趣的。您是否有可能的解释,为什么有时会在同一个容器中发生这种情况,而有时会发生这种情况? (3认同)