我正在修改一个基于nodejs、redis和mysql的应用程序。我已经安装了redis服务器并运行良好,但我可以使用docker-come.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:
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:发布于 2017-05-24 14:15:53
似乎已经尝试将两个Dockerfile合并到一个中
首先,您的多个FROM在这里没有意义。基本概念是将FROM仅以一幅基本图像为基础。请参阅this
其次,您有一个坞-撰写看起来不错,但看到Dockerfile,它显示,您试图在同一个图像中构建两个应用程序(redis和节点应用程序)。
因此,从./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-come.yml)中删除"image:“行。没有必要:
redis:
build: ./docker/redis
image: "redis:alpine" <----编辑。而且,你不再需要apt-get update了。我删除了这个sudo apt-get update &&
发布于 2020-05-07 18:51:43
在做了以下修改之后,它现在开始工作了:
docker >> redis >> Dockerfile
FROM smebberson/alpine-base:1.0.0
'#MAINTAINER Scott Mebberson <scott@scottmebberson.com>
VOLUME ["/data"]
'#Expose the ports for redis
EXPOSE 6379docker-compose.yml文件中没有任何更改。
运行以下命令并查看输出
sudo docker-compose up --build -dsudo docker pssudo docker inspect redis_container_name
sudo docker inspect node_container_name 发布于 2018-01-04 03:22:42
在我的项目中,我轻松地解决了这个问题(复制不起作用):只需在YML文件(版本3)中添加“上下文”-到Dockerfile目录的路径,例如:
build:
context: Starkman.Backend.Storage/Redis
dockerfile: Dockerfile"Starkman.Backend.Storage/Redis" --它的目录路径。并且一个未知的临时目录命令“复制”将在您的“上下文”中。
这是我的Dockerfile:
FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
EXPOSE 6379
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]https://stackoverflow.com/questions/44160556
复制相似问题