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

问题描述 投票:1回答:2

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

$ 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文件

docker-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:
docker redis docker-compose
2个回答
0
投票

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

首先,你的多个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
投票

我在我的项目中解决了这个问题(COPY不起作用):只需添加“context” - YML文件(版本3)中Dockerfile目录的路径,例如:

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

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

这是我的Dockerfile:

FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
EXPOSE 6379
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
© www.soinside.com 2019 - 2024. All rights reserved.