dockerfile创建一个测试容器,怎么启动内在的redis?

Dockerfile:

# 使用Docker官方的Python作为一个基础镜像
FROM python:3.7-slim
# 设置工作目录/app
WORKDIR /app
# 复制当前目录下的所有内容到容器内的/app目录下
ADD . /app
# 安装在requirements.txt文件中声明的文件包
RUN pip install -r requirements.txt
# 设置容器暴露的端口为80
EXPOSE 80
# 定义环境变量
ENV NAME World
# 当容器启动后立即运行app.py
CMD ["python", "app.py"]

requirements.txt:

Flask
Redis

app.py就是运行一个简单的flask程序,这里就不贴出来了

  1. 首先三个文件放在同一个文件夹内dockerspace
  2. 使用命令构建
    docker build -t hellodocker .

image.png
运行hellodocker镜像,正常的,但是出现
image.png
这是没有连接上redis
这个容器启动之后,/bin/bash的方式进去容器内部启动redis?
这个redis应该下载在hellodocker里面吧,应该如何启动redis
单独下一个redis?

阅读 2.2k
3 个回答

flask app应该修改配置,让app连上正确的redis服务地址。
这种情况通常是需要再启动一个redis的容器。

其实可以更进一步,可以考虑用docker compose编排容器。
docker compose 如果是这个场景,docker-compose文件应该是这样的:

version: "3"
services:
  redis:
    image: "redis:5"
    volumes:
      - "redis:/data"
  app:
    image: "centos:7"
    depends_on:
      - "redis"
    command: [ "sleep", "100" ]
    ports:
      - "5000:5000"

需要纠正的是 docker images 看到的是本地的镜像,docker container ls 看到的才是你已经启动的容器。

docker build -t hellodocker . 这个命令就是用来生成一个镜像的,启用 -t 后面的 hellodocker 就是你给镜像起的名字,最后的点表示把设置当前目录为 context 目录。

最后再来说你的 Redis 的问题,你可以使用 Docker 再去启动一个 Redis 容器,然后连接,如果你选则这种方式,那建议你使用 docker-compose 这也更加便捷。

也可以在主机上跑一个 Redis ,然后从容器里面连接主机的 Redis。

/bin/bash的方式进去容器内部启动redis?

显然不行,从你上面的 Dockerfile 来看,你的镜像里面并没有包含 Redis。

这个redis应该下载在hellodocker里面吧,应该如何启动redis

从 Docker 的最佳实践来说,一个镜像、容器,只应当作为一个单独的服务使用,而不是把你的应用和 Redis 揉在一起。

新手上路,请多包涵

你可以使用docker-compose编排一个redis容器, 比如:

services:
    my_flask_web:
        build: .
        port:
            - '80:80'
    redis:
        image: redis
        restart: always

连接redis的时候,这样连接:

redis_store = StrictRedis(host='my_flask_web', port=6379, decode_responses=True)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题