Yarn工作区和Docker

5
我正在尝试使用yarn workspaces,并将我的应用程序放到Docker镜像中。
文件夹结构如下:
- root
- Dockerfile - node_modules/
- libA --> ../libA
- libA/
- app/
不幸的是,Docker不支持符号链接,因此即使Dockerfile位于根目录中,也无法将根目录中的node_modules文件夹复制到Docker镜像中。
我可以通过.dockerignore排除符号链接,然后将真实目录复制到镜像中。另一个想法是使用工具将符号链接替换为符号链接的实际内容。您是否知道是否有这样的工具(最好是JavaScript包)?
谢谢

1
在 Docker 容器环境中,您不应该从开发环境中复制节点模块,而是应该使用 yarn install 进行安装。这可以在您的 Dockerfile 中设置。 - Benjamin Scholtz
哦,没想到还有这种可能性。非常感谢! - Steven
很酷!如果你需要进一步的帮助,我可以把它放在答案中,否则我相信你可以通过对以上内容的研究解决问题。 - Benjamin Scholtz
1
我猜测libA已经发布到npmjs仓库了。如果你不想发布libA怎么办? - Gudlaugur Egilsson
@GudlaugurEgilsson 我已经寻找这个确切的答案很长时间了 :-) - AnthonyA
显示剩余2条评论
1个回答

2
Yarn用于依赖管理,应配置为在Docker容器内运行以安装必要的依赖项,而不是从本地计算机复制。 Docker的主要好处是允许您重新创建开发环境,而不必担心它运行的机器 - 同样适用于Yarn,通过运行“yarn install”,它会为构建Docker镜像的机器的相关架构安装正确的版本。
在您的Dockerfile中,在配置工作目录后,包含以下内容:
RUN yarn install

那么你就可以完成所有的设置了!

另外,你还应该在.gitignore.dockerignore文件中包含node_modules目录,这样在分发代码时就不会被包括进去。

简而言之:不要从本地机器复制node_modules目录,在Dockerfile中包含RUN yarn install命令即可。


2
但是 yarn.lock 在根目录中,而不在子项目中,因此我们可能会得到意外的依赖升级,这将导致各种混乱(当前我正在尝试解决的问题)。 - Chris Kemp
使用Docker构建上下文,您可以从根目录运行Docker构建,用于子项目。然后,您可以拉取所需的任何文件(例如yarn.lock)。 - Benjamin Scholtz
@ChrisKemp 你有找到解决这个问题的方法吗? - Gudlaugur Egilsson
不,我选择不共享常见的node_modules,并让每个子项目自行管理。 - Chris Kemp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接