首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:服务“redis”生成失败。用拼图法建立红色图像时

错误:服务“redis”生成失败。用拼图法建立红色图像时
EN

Stack Overflow用户
提问于 2017-05-24 13:57:01
回答 3查看 2.7K关注 0票数 1

我正在修改一个基于nodejs、redis和mysql的应用程序。我已经安装了redis服务器并运行良好,但我可以使用docker-come.yml对这三个服务器进行对接。

代码语言:javascript
复制
$ 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:

代码语言:javascript
复制
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

代码语言:javascript
复制
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:
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-24 14:15:53

似乎已经尝试将两个Dockerfile合并到一个

首先,您的多个FROM在这里没有意义。基本概念是将FROM仅以一幅基本图像为基础。请参阅this

其次,您有一个坞-撰写看起来不错,但看到Dockerfile,它显示,您试图在同一个图像中构建两个应用程序(redis和节点应用程序)。

因此,从./docker/node/Dockerfile中取出redis的内容:

代码语言:javascript
复制
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:

代码语言:javascript
复制
FROM redis:alpine
COPY redis.conf /usr/local/etc/redis/redis.conf
# No need to set a custom CMD

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

代码语言:javascript
复制
 redis:
    build: ./docker/redis
    image: "redis:alpine"        <----

编辑。而且,你不再需要apt-get update了。我删除了这个sudo apt-get update &&

票数 0
EN

Stack Overflow用户

发布于 2020-05-07 18:51:43

在做了以下修改之后,它现在开始工作了:

  1. 在根停靠器中创建文件夹
  2. 在坞内创建文件夹redis
  3. 创建具有以下内容的Dockerfile:

docker >> redis >> Dockerfile

代码语言:javascript
复制
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. 运行以下命令来构建容器
代码语言:javascript
复制
sudo docker-compose up --build -d
  1. 运行此命令以检查正在运行的容器
代码语言:javascript
复制
sudo docker ps
  1. 运行以下命令以检查网络并获取IP
代码语言:javascript
复制
sudo docker inspect redis_container_name 

sudo docker inspect node_container_name  
票数 0
EN

Stack Overflow用户

发布于 2018-01-04 03:22:42

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

代码语言:javascript
复制
build:
context: Starkman.Backend.Storage/Redis
dockerfile: Dockerfile

"Starkman.Backend.Storage/Redis" --它的目录路径。并且一个未知的临时目录命令“复制”将在您的“上下文”中。

这是我的Dockerfile:

代码语言:javascript
复制
FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
EXPOSE 6379
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44160556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档