node.js - 生成可执行文件时 Docker-compose EACCESS 错误

标签 node.js linux docker docker-compose

我有一个 Dockerfile,我在其中引入了一些文件并对一些内容进行了 chmod。它是生成可执行文件的 Node 服务器。

FROM ubuntu:16.04
RUN apt-get update && apt-get install -y --no-install-recommends curl sudo
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
RUN apt-get install -y nodejs && \
apt-get install --yes build-essential
RUN apt-get install --yes npm

#VOLUME "/usr/local/app"

# Set up C++ dev env
RUN apt-get update && \
   apt-get dist-upgrade -y && \
   apt-get install gcc-multilib g++-multilib cmake wget -y  && \
   apt-get clean autoclean && \
   apt-get autoremove -y
   #wget -O /tmp/conan.deb -L https://github.com/conan-io/conan/releases/download/0.25.1/conan-ubuntu-64_0_25_1.deb && \
   #dpkg -i /tmp/conan.deb

#ADD ./scripts/cmake-build.sh /build.sh
#RUN chmod +x /build.sh
#RUN /build.sh


RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
RUN apt-get install -y nodejs sudo


RUN mkdir -p /usr/local/app
WORKDIR /usr/local/app
COPY package.json /usr/local/app
RUN ["npm", "install"]
COPY . .


RUN echo "/usr/local/app/dm" > /etc/ld.so.conf.d/mythrift.conf
RUN echo "/usr/lib/x86_64-linux-gnu" >> /etc/ld.so.conf.d/mythrift.conf
RUN echo "/usr/local/lib64" >> /etc/ld.so.conf.d/mythrift.conf
RUN ldconfig

EXPOSE 9090
RUN chmod +x dm/dm3
RUN ldd dm/dm3
RUN ["chmod", "+x", "dm/dm3"]
RUN ["chmod", "777", "policy"]
RUN ls -al .
CMD ["nodejs", "app.js"]

一切正常,但是当我使用 docker-compose 以在 docker 中拥有自动加载开发环境时,在生成可执行进程时出现 EACCES 错误。

version: '3'
services:
  web:
    build: .
    command: npm run start
    volumes:
      - .:/usr/local/app/
      - /usr/app/node_modules
    ports:
      - "3000:3000"

我正在使用 nodemon 在更改时重新启动服务器,因此组合中的卷。我很乐意再次启动该工作流程。

最佳答案

我认为你的问题是你如何编写 docker-compose.yml 文件。

  1. 我认为 line 命令不是必需的,因为你 指定了如何在 Dockerfile 中启动程序。
  2. 你能试着运行这条线路吗?

version: '3'
services:
  web:
    build: 
      context: ./
      dockerfile: Dockerfile    
    volumes:
      - .:/usr/local/app/
      - /usr/app/node_modules
    ports:
      - "3000:3000"

否则,我认为 volumes 属性不共享/usr/app/node_modules。我认为这是不好的做法。您可以在 Dockerfile 中运行“npm install”

希望你能理解我=)

关于node.js - 生成可执行文件时 Docker-compose EACCESS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49502545/

相关文章:

linux - 是否可以延迟 Linux OOM Killer 并运行我的进程?

linux - 为什么在 linux 中为每个进程保留一个内核堆栈?

macos - 在Mac上设置Docker:无法通过localhost连接

amazon-web-services - 为什么我在 docker/aws eb 上收到权限被拒绝错误?

node.js - 我可以在发布之前检查 npm 包的内容吗?

php - 查询以在 'threaded' View 中获取最近的消息

node.js - 安装 Node 但缺少node_modules中的所有包

linux - 如何使用 Travis CI 将多个 docker 容器部署到 gcloud?

docker - 调整 Docker 容器的磁盘使用量

node.js - Node.js 如何在其内部实现 require() ?