我正在开发一个webapp,我的开发环境需要节点。
我不想要一个docker生产容器,而是一个开发容器:我需要在docker容器和本地开发机器之间共享文件。我每次更改源文件时都不想运行docker。
目前我的dockerfile是:
#React development
FROM node:4.1.1-wheezy
MAINTAINER xxxxx
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get -y install sudo locales apt-utils
RUN locale-gen es_ES.UTF-8
RUN dpkg-reconfigure locales
RUN echo Europe/Madrid | sudo tee /etc/timezone && sudo dpkg-reconfigure --frontend noninteractive tzdata
ADD src/package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /src && cp -a /tmp/node_modules /src/
WORKDIR /src
EXPOSE 3000
VOLUME /src
我需要目录来放置我的所有源文件(通过数据卷共享目录)。我还需要在dockerfile中执行npm install,这样我就可以在sources目录(/ src / node_modules)中找到我的node_modules目录。
但是当我将主机目录作为数据卷挂载时,由于/ src目录已经存在于容器的映像中,其内容将被主机上的/ src目录的内容替换,所以我没有我的/ src / node_modules目录:
docker run -it --volumes-from data-container --name node-dev user/dev-node /bin/bash
我的主机目录没有node_modules目录,因为我通过github获取它并且不同步,因为它是一个非常重的目录。
答案 0 :(得分:1)
我的解决方案是使用ENTRYPOINT指令复制node_modules目录。
docker-entrypoint.sh:
#!/bin/bash
if ! [ -d node_modules ]; then
cp -a /tmp/node_modules /src/
fi
exec "$@"
将两行添加到dockerfile:
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
答案 1 :(得分:1)
免责声明:以下内容与Docker无关。
我使用SSHFS。 Ubuntu Wiki有一个非常好的描述:
SSHFS是一种使用SSH来启用远程安装的工具 本地机器上的文件系统;网络(大部分)是透明的 用户。
不确定这在您的方案中是否有用,但我的所有主机都运行SSH服务器,所以对我来说这是一个明智的选择。 win-sshfs
项目似乎不再积极开发,但它仍然在8/10胜利中运行良好(虽然设置有点奇怪)。 OS X和Linux都可以通过FUSE获得更好的支持。