Docker如何在Container中使用redis启动nodejs应用程序?

时间:2016-04-18 02:13:53

标签: node.js docker redis docker-compose dockerfile

我有一个简单但好奇的问题,我已将我的图像基于nodejs图像,我已在图像上安装了redis,现在我想启动redis和nodejs应用程序在我执行docker-compose时在容器中运行。但是我只能得到一个工作,节点总是给我一个错误。有没有人有任何想法

  1. 如何在docker-compose up上启动nodejs应用程序?
  2. 如何在同一图像/容器中启动后台运行的redis?
  3. 我的Docker文件如下。

    # Set the base image to node
    FROM node:0.12.13
    
    # Update the repository and install Redis Server
    RUN apt-get update && apt-get install -y redis-server libssl-dev wget curl gcc
    
    # Expose Redis port 6379
    EXPOSE      6379
    # Bundle app source
    COPY ./redis.conf /etc/redis.conf
    
    EXPOSE  8400
    
    WORKDIR /root/chat/
    CMD ["node","/root/www/helloworld.js"]
    ENTRYPOINT  ["/usr/bin/redis-server"]
    

    我从控制台日志获取的错误是

    [36mchat_1 | [0m [1] 18 Apr 02:27:48.003#致命错误,无法打开配置文件'node'

    Docker-yml如下所示

    chat:
        build: ./.config/etc/chat/
        volumes:
            - ./chat:/root/chat
        expose:
            - 8400
        ports:
            - 6379:6379  
            - 8400:8400   
        environment:
            CODE_ENV: debug
            MYSQL_DATABASE: xyz
            MYSQL_USER: xyz
            MYSQL_PASSWORD: xyz        
        links:
            - mysql   
        #command: "true"  
    

1 个答案:

答案 0 :(得分:2)

docker文件只能有一个入口点(CMD或ENTRYPOINT,而不是两者)。但是,您可以使用systemd等进程管理器在单个docker镜像中运行多个进程。互联网上有无数的食谱可供选择。您可以使用此泊坞窗图像作为基础:

https://github.com/million12/docker-centos-supervisor

但是,我不明白为什么你不会使用docker compose来启动一个单独的redis容器,就像你似乎想要使用mysql一样。 BTW您发布的docker-compose文件中的mysql定义在哪里?

以下是我用于在当前目录中构建节点图像并启动redis的撰写文件的示例。

web:
  build: .
  ports:
    - "3000:3000"
    - "8001:8001"
  environment:
    NODE_ENV: production
    REDIS_HOST: redis://db:6379
  links:
    - "db"
db:
  image: docker.io/redis:2.8

它应该与docker文件一起工作,看起来就像你试图启动redis的那个。