docker-compose 基于Dockerfile 安装并启动redis容器的血案
前言
为了实现“一键部署”的目的,我采用Dockerfile 和 docker-compose来实现自己的目的。这个过程中,我怎么也无法启动自己的redis-server服务。
目录结构
~/Workspace/docker/images/redis tree
.
├── Dockerfile
├── conf
│ └── redis.conf
└── docker-compose.yml
文件内容
Dockerfile
FROM redis:latest
WORKDIR /data/
# 默认的源太慢,原因就是被我大天朝给墙了,所以换成国内,阿里的
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean
# 不能直接 apt-get install curl ,因为容器里面默认apt的包是空的,所以需要更新到本地
RUN apt-get update
# docker 是基于Ubuntu的,所以里面基本默认都带有apt-get这个工具
RUN apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /usr/local/etc/redis/ \
&& curl http://download.redis.io/redis-stable/redis.conf > /usr/local/etc/redis/redis.conf
CMD [ "redis-server","/usr/local/etc/redis/redis.conf"]
docker-compose.yml
version: "2.2"
services:
redis:
# 使用当前目录下的Dockerfile构建镜像
build: .
image: my_redis
container_name: redis
ports:
- "6379:6379"
volumes:
- ./data:/data
# 此处就是引发血案的地方
# - ./conf:/usr/local/etc/redis
问题分析:
Dockerfile 在构建的过程中,通过curl获取到了redis.conf的配置
docker-compose 在启动容器时,由于
volumes这个地方将本地的目录挂在到了redis容器内部的/usr/local/etc/redis下。那么/usr/local/etc/redis里面的文件就会被全部被本地覆盖。如果本地./conf这个目录下是空的,则/usr/local/etc/redis里面也会是空的。解决办法
- 本地的
./conf文件夹中存在redis.conf,这样的文件 - 像上面的案例一样,不要将redis.conf暴露处理。
- 本地的
调试问题的经过
本次调试,着实让我头疼了老一阵,一看死,总是报 can't open file 这种错误。我查看了docker 日志,依然无法找到问题。想进入到docker 容器里面去看,结果发现redis容器根本就没有起来。将Dockerfile 改成如下的形式,才启动了redis容器,并顺利进入到容器里面。才找到原来是redis.conf文件被覆盖掉了。
FROM redis:latest
WORKDIR /data/
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean
RUN apt-get update
RUN apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /usr/local/etc/redis/ \
&& curl http://download.redis.io/redis-stable/redis.conf > /usr/local/etc/redis/redis.conf
# CMD [ "redis-server","/usr/local/etc/redis/redis.conf"]
# 启动容器,直接让其运行 shell脚本,这样容器就不会推出了。
CMD ["sh","-c","while true;do sleep 1000 ;done"]
docker-compose 基于Dockerfile 安装并启动redis容器的血案的更多相关文章
- docker 启动redis容器
dockerfile FROM registry.cn-hangzhou.aliyuncs.com/xxxholic/redis COPY redis.conf EXPOSE redis.conf p ...
- Docker Compose vs. Dockerfile
Docker Compose vs. Dockerfile - which is better? - Stack Overflowhttps://stackoverflow.com/questions ...
- Docker学习笔记_安装和使用Redis
一.准备 1.宿主机OS:Win10 64位 2.虚拟机OS:Ubuntu18.04 3.操作账号:Docker 二.安装过程 1.搜索Redis su ...
- Linux系统在线安装、启动 redis
环境: Linux系统:VMware 14 中 CentOS 7 64 位 redis版本:redis-stable.tar.gz(当前版本是:redis-cli 4.0.9) 一.Linux在线安装 ...
- docker18.09.5 安装与启动、容器、镜像
docker安装与启动 yum -y update 1.卸载老版本的 docker 及其相关依赖yum remove -y docker docker-common container-selinux ...
- docker(2)安装centos7镜像与容器管理
1.镜像加速器 创建/etc/docker/daemon.json { "registry-mirrors": [ "https://registry.docker-cn ...
- docker compose线下安装
Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 Compose 中你可以使用 YAML 文件来配置你的应用服务.然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务 ...
- docker学习笔记(6)——docker场景问题汇总(centos7 由于内核版本低带来的一系列问题,docker彻底卸载,安装、启动日志报错分析)
参考资料: https://nachuan.blog.csdn.net/article/details/96041277 https://www.cnblogs.com/xzkzzz/p/962765 ...
- docker学习笔记:修改无法启动的容器中的内容
我们可能会碰到这样的一个问题,在容器执行过程中,修改了容器的内容(如配置文件信息),但因为修改出了问题.导致容器关闭后,无法启动. 这事需要重新修改配置文件. 正常情况下可以通过 docker exe ...
随机推荐
- GO语言web框架Gin之完全指南(一)
作为一款企业级生产力的web框架,gin的优势是显而易见的,高性能,轻量级,易用的api,以及众多的使用者,都为这个框架注入了可靠的因素.截止目前为止,github上面已经有了 35,994 star ...
- Falling Squares
2020-01-08 10:16:37 一.Falling squares 问题描述: 问题求解: 本题其实也是一条经典的区间问题,对于区间问题,往往可以使用map来进行区间的维护操作. class ...
- Building Applications with Force.com and VisualForce(Dev401)(十四):Implementing Business Processes:Auditing Processes
Dev401-015:Implementing Business Processes:Auditing Processes Module Objectives1.list some of the fe ...
- PyTorch专栏(二)
专栏目录: 第一章:PyTorch之简介与下载 PyTorch简介 PyTorch环境搭建 第二章:PyTorch之60min入门 PyTorch 入门 PyTorch 自动微分 PyTorch 神经 ...
- 干货 | Python进阶系列之学习笔记(二)
目录 对象 字符串 一.对象 (1)什么是对象 在python中一切都是对象,每个对象都有三个属性分别是,(id)身份,就是在内存中的地址,类型(type),是int.字符.字典(dic).列表(li ...
- Go语言micro之快速搭建微服务
背景 go-micro给我们提供了一个非常便捷的方式来快速搭建微服务,而且并不需要提前系统了解micro,下面用一个简单的示例来快速实现一个服务. 创建Proto文件 因为我们要做微服务,那么就一定有 ...
- jsonp跨域的原理及实现
1,什么是跨域? 跨域跨域,跨过域名,笼统来说就是一个域名区请求另外一个域名的数据,但实际上,不同端口.不同域名.不同协议上请求数据都会出现跨域问题.浏览器出于安全考虑会报出异常,拒绝访问. 2,js ...
- 数塔(杭电oj2084)
Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大 ...
- prometheus+grafana实现监控过程的整体流程
prometheus安装较为简单,下面会省略安装步骤: 一.服务器启动 Prometheus启动 ./prometheus --config.file=prometheus.yml Grafana启动 ...
- Q - Queue HDU - 5493(树状树组维护区间前缀和 + 二分找预留空位)
Q - Queue HDU - 5493 Problem Description NNN people numbered from 1 to NNN are waiting in a bank for ...