我将基于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。
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文件
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:
答案 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)
在进行以下更改后,它现在可以工作:
在root docker中创建一个文件夹
在docker create文件夹内部redis
创建具有以下内容的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
文件中没有任何更改。
运行以下命令并查看输出
sudo docker-compose up --build -d
sudo docker ps
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"