Dockerfile:使用多个参数和运行时遇到麻烦

时间:2018-10-25 18:56:11

标签: docker dockerfile parceljs

我正试图让Parcel Bundler在Dockerfile中构建资产。但是它失败了:

  

找不到条目。       在Bundler.bundle(/usr/local/lib/node_modules/parcel-bundler/src/Bundler.js:260:17)       在错误处:服务'webapp'生成失败:命令'/ bin / sh -c parcel build index.html'返回了非零代码:   1

这是我的dockerfile:

FROM node:8 as base
WORKDIR /usr/src/app
COPY package*.json ./

# Development
FROM base as development
ENV NODE_ENV=development
RUN npm install
RUN npm install -g parcel-bundler
WORKDIR /usr/src/app
RUN parcel build index.html     <----- this is where its failing!
#RUN parcel watch index.html
# Uncomment to use Parcel's dev-server
#CMD [ "npm", "run", "parcel:dev" ]
#CMD ["npm", "start"]

# Production
FROM base as production
ENV NODE_ENV=production
COPY . .
RUN npm install --only=production
RUN npm install -g parcel-bundler
RUN npm run parcel:build
CMD [ "npm", "start" ]

注意:我正在尝试让它首先在开发模式下运行。

当我“登录”容器时,我发现此命令确实失败了:

# /bin/sh -c parcel build index.html

但这可行:

# parcel build index.html 

这可行:

# /bin/sh -c "parcel build index.html"

但是在Dockerfile中使用这些变体仍然不起作用:

RUN /bin/sh -c "parcel build index.html"

RUN ["/bin/sh", "-c", "parcel build index.html"]

注意:我也尝试了'bash'而不是'sh',但它仍然无法正常工作。

有什么想法为什么不起作用?

1 个答案:

答案 0 :(得分:1)

bashsh确实是不同的shell,但是在这里无关紧要。 -c "command argument argument"将整个shell字符串传递给-c,而-c command argument argument仅将command传递给-c,而将参数解释为对您的shell的附加命令。重新调用。因此,正确的调用确实是:

RUN parcel build index.html

或者,如果您希望显式地执行what Docker will do when it sees RUN followed by a string,则可以执行以下操作:

RUN [ "bash", "-c", "parcel build index.html" ]

但是我不认为这是您的问题。查看您的docker文件,我认为您可能是:

  • 缺少Bundler需要的一些文件(此时您仅复制到package*.json中)
  • 缺少Bundler需要运行的一些其他配置(我看不到您明确设置'webapp',但这可能在package*.json文件中)

我会把钱花在第一个上。