我是Docker的新手,我想在我的计算机上映射node_modules文件夹(出于调试目的)。
这是我的docker-compose.yml
web:
build: .
ports:
- "3000:3000"
links:
- db
environment:
PORT: 3000
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
db:
image: mongo:3.3
ports:
- "27017:27017"
command: "--smallfiles --logpath=/dev/null"
我在Mac上使用Docker。当我运行docker-compose up -d
全部时,一切正常,但是它在我的计算机上创建了一个node_modules文件夹,但是它是空的。我进入了容器和ls node_modules的仓库,所有的软件包都在那里。
我也如何在计算机上的容器中获取内容?
谢谢
TL; DR工作示例,克隆并尝试: https : //github.com/xbx/base-server
首先(在运行容器之前),需要在计算机中使用node_modules(外部映像)进行调试。
如果只想调试node_modules:
volumes:
- /path/to/node_modules:/usr/src/app/node_modules
如果要调试代码和node_modules,请执行以下操作:
volumes:
- .:/usr/src/app/
请记住,您npm install
至少需要在容器外运行一次(或复制docker build
生成的node_modules目录)。现在,如果您需要更多详细信息,请让我。
编辑。因此,无需在OSX中使用npm,您可以:
docker build
然后docker cp <container-id>:/path/to/node-modules ./local-node-modules/
。然后在您的docker-compose.yml中挂载这些文件并对您想要的任何内容进行故障排除。docker build
在那里(Dockerfile)npm install
在另一个目录中执行。然后在您的命令(CMD或docker-compose命令)中将副本(cp
)复制到正确的目录,但是此目录从您的计算机上空挂载(docker-compose.yml中的一个卷),然后对所需的任何内容进行故障排除。编辑2。(选项2)工作示例,克隆并尝试: https : //github.com/xbx/base-server我在您的仓库中自动完成了所有操作。
Docker文件
FROM node:6.3
# Install app dependencies
RUN mkdir /build-dir
WORKDIR /build-dir
COPY package.json /build-dir
RUN npm install -g babel babel-runtime babel-register mocha nodemon
RUN npm install
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
RUN ln -s /build-dir/node_modules node_modules
# Bundle app source
COPY . /usr/src/app
EXPOSE 1234
CMD [ "npm", "start" ]
docker-compose.yml
web:
build: .
ports:
- "1234:1234"
links:
- db # liaison avec la DB
environment:
PORT: 1234
command: /command.sh
volumes:
- ./src/:/usr/src/app/src/
- ./node_modules:/usr/src/app/node_modules
- ./command.sh:/command.sh
db:
image: mongo:3.3
ports:
- "27017:27017"
command: "--smallfiles --logpath=/dev/null"
command.sh
#!/bin/bash
cp -r /build-dir/node_modules/ /usr/src/app/
exec npm start
请克隆我的仓库,然后做docker-compose up
。它可以满足您的需求。PS:可以通过更好的方式(例如最佳做法等)来做同样的事情
我在OSX中,它对我有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句