错误:服务'redis'无法构建。通过docker-compose构建redis图像时

时间:2017-05-24 13:57:01

标签: docker redis docker-compose

我将基于nodejs,redis和mysql的应用程序停靠。我已经安装了redis服务器并且运行正常,但是我可以通过使用docker-compose.yml来实现所有三个的dockerize

$ 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。

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" ]

这是docker-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:

3 个答案:

答案 0 :(得分:0)

您似乎尝试将两个Dockerfile合并为一个

首先,您的多个FROM在这里毫无意义。基本概念是仅基于FROM一个基本图像。见this

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

所以从./docker/node/Dockerfile中取出redis东西:

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

而且,我建议从redis(docker-compose.yml)中删除“image:”行。没有必要:

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

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

答案 1 :(得分:0)

在进行以下更改后,它现在可以工作:

  1. 在root docker中创建一个文件夹

  2. 在docker create文件夹内部redis

  3. 创建具有以下内容的Dockerfile:

docker >> redis >> Dockerfile

FROM smebberson/alpine-base:1.0.0

'#MAINTAINER Scott Mebberson <scott@scottmebberson.com>

VOLUME ["/data"]

'#Expose the ports for redis

EXPOSE 6379

docker-compose.yml文件中没有任何更改。

运行以下命令并查看输出

  1. 运行此命令来构建容器
sudo docker-compose up --build -d
  1. 运行此命令以检查正在运行的容器
sudo docker ps
  1. 运行此命令以检查网络并获取IP
sudo docker inspect redis_container_name 

sudo docker inspect node_container_name  

答案 2 :(得分:-1)

我在我的项目中很容易解决这个问题(COPY不工作):只需添加&#34; context&#34; - YML文件(版本3)中Dockerfile目录的路径,例如:

Foriegn

build: context: Starkman.Backend.Storage/Redis dockerfile: Dockerfile - 其目录路径。还有一个未知的命令临时目录&#34; COPY&#34;将在你的&#34; context&#34;。

这是我的Dockerfile:

"Starkman.Backend.Storage/Redis"