2017-05-24 80 views
0

我在dockerizing一个基于nodejs,redis和mysql的应用程序。我已经安装了Redis的服务器及其运行良好,但我能够通过使用泊坞窗,compose.yml错误:服务'redis'未能建立。当通过docker-compose构建redis镜像时

$ docker-compose up --build 
Building redis 
Step 1/11 : FROM node:alpine 
---> e079048502ec 
Step 2/11 : FROM redis:alpine 
---> da2b86c1900b 
Step 3/11 : RUN mkdir -p /usr/src/app 
---> Using cache 
---> 28b2f837b54c 
Step 4/11 : WORKDIR /usr/src/app 
---> Using cache 
---> d1147321eec4 
Step 5/11 : RUN apt-get install redis-server 
---> Running in 2dccd5689663 
/bin/sh: apt-get: not found 
ERROR: Service 'redis' failed to build: The command '/bin/sh -c apt-get install redis-server' returned a non-zero code: 127 

这是我dockerfile所有三个dockerize。

Dockerfile:

FROM node:alpine 
FROM redis:alpine 

# Create app directory 
    RUN mkdir -p /usr/src/app 
    WORKDIR /usr/src/app 

# Install app dependencies 

    ## Install Redis ## 
     RUN apt-get install redis-server 
    ## Install nodejs on ubuntu ## 
     RUN sudo apt-get update && wget http://nodejs.org/dist/v0.6.9/node-v0.6.9.tar.gz \ 
     && tar -xvzf node-v0.6.9.tar.gz \ 
     && cd node-v0.6.9 \ 
     && ./configure && make && sudo make install \ 
     && mkdir myapp && cd myapp \ 
     && npm init \ 
     && npm install express --save \ 
     && npm install express \ 
     && npm install --save path serve-favicon morgan cookie-parser body-parser \ 
     && npm install --save express jade \ 
     && npm install --save debug \ 

    COPY package.json /usr/src/app/ 
    COPY redis.conf /usr/local/etc/redis/redis.conf 
    RUN npm install 

# Bundle app source 
    COPY . /usr/src/app 

EXPOSE 3000 

CMD [ "redis-server", "/usr/local/etc/redis/redis.conf", "npm", "start" ] 

这是搬运工,compose.yml文件

泊坞窗,compose.yml

version: '2' 

services: 
    db: 
    build: ./docker/mysql 
    # image: mysql:5.7 
    volumes: 
     - db_data:/var/lib/mysql 
     #- ./mysql:/docker-entrypoint-initdb.d 
    # restart: always 
    environment: 
     MYSQL_ROOT_PASSWORD: root 
     # MYSQL_DATABASE: cg_apiserver 
     # MYSQL_USER: root 
     # MYSQL_PASSWORD: root 

    redis: 
    build: ./docker/redis 
    image: "redis:alpine" 

    node: 
    build: ./docker/node 
    ports: 
     - '3000:80' 
    restart: always 
    volumes: 
     - .:/usr/src/app 
    depends_on: 
     - db 
     - redis 
    command: npm start 

volumes: 
    db_data: 

回答

0

看来你已经尝试合并两个Dockerfile在一个

首先,你的多重FROM在这里没有意义。基本概念是基于FROM只有一个基本图像。请参阅this

其次,您有一个docker-compose看起来不错,但是看到Dockerfile,它表明您正尝试在同一图像中构建两个应用程序(redis和node app)。

因此,需要从redis的东西./docker/node/Dockerfile出来:

FROM node:alpine 

# Create app directory 
    RUN mkdir -p /usr/src/app 
    WORKDIR /usr/src/app 

# Install app dependencies 
    ## Install nodejs on ubuntu ## 
     RUN wget http://nodejs.org/dist/v0.6.9/node-v0.6.9.tar.gz \ 
     && tar -xvzf node-v0.6.9.tar.gz \ 
     && cd node-v0.6.9 \ 
     && ./configure && make && sudo make install \ 
     && mkdir myapp && cd myapp \ 
     && npm init \ 
     && npm install express --save \ 
     && npm install express \ 
     && npm install --save path serve-favicon morgan cookie-parser body-parser \ 
     && npm install --save express jade \ 
     && npm install --save debug \ 

    COPY package.json /usr/src/app/ 
    RUN npm install 

# Bundle app source 
    COPY . /usr/src/app 

EXPOSE 3000 

CMD ["npm", "start" ] 

使用此./docker/redis/Dockerfile:

FROM redis:alpine 
COPY redis.conf /usr/local/etc/redis/redis.conf 
# No need to set a custom CMD 

而且,我建议去掉“ image:“来自redis的行(docker-compose.yml)。这是没有必要:

redis: 
    build: ./docker/redis 
    image: "redis:alpine"  <---- 

编辑。此外,您不再需要apt-get update。我已经删除了此sudo apt-get update &&

+0

根据你的代码,它抛出这个错误同时调整文件后服务“的Redis”未能建立:LSTAT redis.conf:没有这样的文件或目录 –

+0

你需要调整redis吗?如果没有,请在Dockerfile中删除该.conf行。如果是的话,让我知道你有哪个文件。 – Robert

+0

如果你使用alpine,请用'apk add --update'替换'apt-get install' – user2915097

-1

心中已经解决了这个问题(COPY不工作),容易在我的项目:只需添加“背景” - 在你的阳明文件路径Dockerfile目录(第3版),例如:

build: 
context: Starkman.Backend.Storage/Redis 
dockerfile: Dockerfile 

"Starkman.Backend.Storage/Redis" - 它的路径到目录。并且命令“COPY”的未知临时目录将位于您的“上下文”中。

这是我Dockerfile:ERROR:

FROM redis 
COPY redis.conf /usr/local/etc/redis/redis.conf 
EXPOSE 6379 
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]