【问题标题】:docker-compose clearing database each time i am building container每次我构建容器时 docker-compose 清除数据库
【发布时间】:2021-07-09 04:57:00
【问题描述】:

我的 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"]

码头工人撰写文件

    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,它正在正常构建和运行,但每次构建它都会创建新数据库 所以清除旧的数据库数据

有什么办法可以解决吗?

请看一下。

【问题讨论】:

  • 因为你没有正确定义 Volume。这是正确的方法。 /var/run/mysqld:/var/run/mysqld

标签: mysql docker docker-compose


【解决方案1】:

为了在 任何 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2016-05-15
    • 2022-08-21
    • 2019-05-04
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多