每次我构建容器时 docker-compose 清除数据库

时间:2021-07-09 04:57:00

标签: mysql docker docker-compose

我的 Dockerfile

    FROM python:3.8
    ARG index_url

    ENV PYTHONUNBUFFERED 1
    WORKDIR /usr/src/antiquely

    COPY ./ /usr/src/antiquely

    RUN apt-get -y update
    RUN apt-get -y install python-mysqldb
    RUN apt-get -y install python3-dev build-essential default-libmysqlclient-dev

    RUN pip install -r requirements.txt


    CMD ["/bin/bash"]

docker-compose 文件

    version: "3"

    services:
    web:
        container_name: antiquely
        build: ./
        # command: python manage.py runserver 0.0.0.0:8000
        command: "bash -c 'python manage.py runserver 0.0.0.0:8000'"
        working_dir: /usr/src/antiquely
        ports:
        - "8000:8000"
        volumes:
        - ./:/usr/src/antiquely
        links:
        - db

    #mysql
    db:
        image: mysql
        restart: always
        environment:
        MYSQL_DATABASE: "baby"
        MYSQL_USER: "soubhagya"
        MYSQL_PASSWORD: "Thinkonce"
        MYSQL_ROOT_PASSWORD: "Thinkonce"
        volumes:
        - /var/run/mysqld
        ports:
        - "3306:3306"

我有我的 docker 和 docker-compose 它正在构建和正常运行,但每次我构建它时都会创建新的数据库 所以清除旧的数据库数据

有什么办法可以解决这个问题吗?

请看。

1 个答案:

答案 0 :(得分:0)

为了在 任何 docker 容器的运行之间维护数据,您必须提供卷挂载。

您通常可以在您使用的图像的官方页面中看到此类说明。例如,来自 DockerHub 上的 mysql 图像:

<块引用>

命令的 -v /my/own/datadir:/var/lib/mysql 部分将底层主机系统中的 /my/own/datadir 目录挂载为容器内的 /var/lib/mysql,其中 MySQL默认情况下将写入其数据文件。

(查找“存储数据的位置”部分)。

在您的情况下,您应该将卷指令添加到您的 docker-compose 中的 db 服务定义:

db:
  # ...
  volumes:
  - /my/own/datadir:/var/lib/mysql