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