2017-05-24 66 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" ]