当前位置: 首页 > 面试题库 >

docker-compose在node_modules上的卷,但为空

梁俊智
2023-03-14
问题内容

我对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生成的npm_modules
)。现在,如果您需要更多详细信息,请让我。

编辑 。因此,无需在OSX中使用npm,您可以:

  1. docker build然后docker cp <container-id>:/path/to/node-modules ./local-node-modules/。然后在您的docker-compose.yml中挂载这些文件并对您想要的任何内容进行故障排除。
  2. 或者,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中,它对我有用。



 类似资料:
  • 问题内容: 我有下面的例子 效果很好。当我运行它时,在其中创建那些命名的卷,一切都很好。但是,从主机上,我只能以root 用户身份访问,因为它是(有意义的)。我想知道是否有一种方法可以将主机的目录设置为更明智/更安全的目录(例如,我用来在主机上执行大多数操作的相对没有特权的用户),或者我是否只需要手动将其吸干。我已经开始有许多脚本可以解决其他问题,因此多行几行不会有太大问题,但是如果我愿意的话,我

  • 我最近在Windows10上升级了我的Docker工具箱,现在我的音量挂载不再工作了。我什么都试过了。下面是当前的挂接路径:

  • 问题内容: 我在Kubernetes解决方案上使用Google Jenkins进行了Jenkins实例设置。我尚未更改Kubernetes Pod的任何设置。 当我触发一项新工作时,我可以成功地启动并运行所有内容,直到进行测试为止。 我的测试使用docker-compose。首先,我确保在实例上安装docker(1.5-1 + b1)和docker- compose(1.8.0-2)(我知道我可以

  • 问题内容: 我有一个配置。其中一个容器是Tomcat服务器,它在目录中部署了一些默认文件。 我希望能够传递(覆盖)将要由主机上的某些人部署的存档。我认为最好的办法就是以某种方式切换/覆盖启动:默认情况下,我想运行容器内的webapp(文件),但是我希望有可能从主机上挂载目录(对于开发/调试过程中的示例)。 当前,我的行中有以下行,如果需要默认行,则将其注释掉。 有没有更好的方法来实现这一目标? 问

  • 问题内容: 我有一个正在进行dockerizing的开发环境,并且我希望能够实时重新加载所做的更改而不必重建docker映像。我使用docker compose是因为redis是我应用程序的依赖项之一,我喜欢能够链接redis容器 我在我的中定义了两个容器: 我已经到了我应用程序的dockerfile中添加卷的地步,但是如何将主机的目录挂载到卷中,以便对代码的所有实时编辑都可以反映在容器中? 这是

  • 我有我的yaml文件的以下片段。 如何在docker compose文件中为db容器使用的卷定义卷的大小?