使用 dockerfile 构建时出现“can't cd”错误

use*_*541 3 ubuntu node.js docker

这是完整的 dockerfile

FROM ubuntu:12.04

# Create directory 
RUN mkdir -p /dir/subdir

# Download wget
RUN apt-get install -y wget

# Make sure package is up to date
RUN apt-get update

# Install nodejs
WORKDIR /dir
RUN wget http://nodejs.org/dist/v0.10.26/node-v0.10.26-linux-x64.tar.gz
RUN tar -zxf node-v0.10.26-linux-x64.tar.gz
RUN cd /node-v0.10.26-linux-x64 && ./configure
RUN cd /node-v0.10.26-linux-x64 && make
RUN cd /node-v0.10.26-linux-x64 && make install

# Update again
RUN apt-get-update

# Copy all the files 
ADD dir/subdir dir/subdir

EXPOSE 8080
CMD ["node", "/dir/subdir/index.js"]
Run Code Online (Sandbox Code Playgroud)

这是日志的一部分,其中出现错误

Step 6 : RUN tar -zxf node-v0.10.26-linux-x64.tar.gz 
---> Running in xxxxxxx 
---> xxxxxxxxxxxxxx
Removing intermediate container xxxxxxxxxxxx
Step 7 : RUN cd /node-v0.10.26-linux-x64 && ./configure 
---> Running in xxxxxxxx
[91m/bin/sh: 1: cd: can't cd to /node-v0.10.26-linux-x64
 [0m 
The command [/bin/sh -c cd /node-v0.10.26-linux-x64 && ./configure] returned a non-zero   code: 2
Run Code Online (Sandbox Code Playgroud)

有谁知道错误 2 的含义以及如何修复它?

gen*_*nry 5

这次我测试了一下。

FROM ubuntu:12.04

# Create directory 
RUN mkdir -p /dir/subdir

# Make sure package is up to date
RUN apt-get update

# Install dependencies
RUN apt-get install -y build-essential openssl libssl-dev pkg-config python 

# Install nodejs
WORKDIR /dir
ADD http://nodejs.org/dist/v0.10.29/node-v0.10.29.tar.gz /dir/
RUN tar -zxf node-v0.10.29.tar.gz
WORKDIR /dir/node-v0.10.29
RUN ./configure && make && make install
WORKDIR /dir

# Copy all the files 
ADD dir/subdir dir/subdir

EXPOSE 8080
CMD ["node", "/dir/subdir/index.js"]
Run Code Online (Sandbox Code Playgroud)

  • 我会避免添加自动下载/自动解压魔法。坚持使用 `wget`,你不会有任何惊喜。只需在您的示例上使用 cd `cd /dir/node-v0.10.26-linux-x64` 而不是 `cd /node-v0.10.26-linux-x64` 就可以了。 (2认同)