Py学习  »  docker

重新启动docker compose并更新数据库

John Beasley • 5 年前 • 2348 次点击  

我一直在使用一个简单的MySQL表,使用Docker Compose,它只包含ID和NAME列。我试图更新最初创建表的myDb.sql文件,如下所示:

CREATE TABLE `Person` (
  `id` int(11) NOT NULL,
  `firstName` varchar(50) NOT NULL, // updated this column
  `lastName` varchar(50) NOT NULL  // added this column
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我将NAME列更新为firstName,并添加了lastName列。

然后我运行Docker-COMPOSE STOP来停止Docker容器。

然后通过运行Docker-COMPOSE UP重新启动Docker容器。我甚至试过重新启动DOCKER-Come。

SELECT '', id, `firstName` From Person<br>Unknown column 'firstName' in 'field list'

这让我相信我没有正确重启Docker编写。

编辑

这是我的docker-compose.yml文件:

version: "3.7"
services:
www:
    build: .
    ports: 
        - "8001:80"
    volumes:
        - ./www:/var/www/html/
    links:
        - db
    networks:
        - default
db:
    image: mysql:5.7.13
    ports: 
        - "3306:3306"
    environment:
        MYSQL_DATABASE: myDb
        MYSQL_USER: user
        MYSQL_PASSWORD: test
        MYSQL_ROOT_PASSWORD: test
    volumes:
        - ./dump:/docker-entrypoint-initdb.d
        - persistent:/var/lib/mysql
    networks:
        - default
phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links: 
        - db:db
    ports:
        - 8000:80
    environment:
        MYSQL_USER: user
        MYSQL_PASSWORD: test
        MYSQL_ROOT_PASSWORD: test
volumes:
    persistent:

FROM php:7.0.30-apache 
RUN docker-php-ext-install mysqli
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53418
文章 [ 3 ]  |  最新文章 5 年前
John Beasley
Reply   •   1 楼
John Beasley    6 年前

所以我想重新启动docker compose会自动运行myDb.sql文件中的CREATE TABLE查询。如上所述,我将“name”列的名称更改为“firstName”,并添加了一个名为“lastName”的列。

再说一次,我不确定是否有一个命令真正做到了这一点,但最后,我能够在phpmyadmin中修改表。一旦我修改了那里的表,现在我就可以毫无错误地将数据返回到页面。

prasanth
Reply   •   2 楼
prasanth    6 年前

docker-compose down docker-compose up 为您的环境带来新的模式。希望有帮助。如果没有,请尝试更新到最新的mysql映像,您使用的映像已经有3年的历史了。

David Maze
Reply   •   3 楼
David Maze    6 年前

这个 docker-entrypoint-initdb.d 机制只在数据库容器第一次启动时运行,数据库为空。你需要明确 docker-compose rm 你身后的集装箱 docker-compose stop 它们将导致删除当前数据库,然后在新的空数据库中创建新的空表。

迁移 . 各种Docker数据库映像没有直接的迁移支持;这几乎总是打包在应用程序级数据库库中(例如,RubyonRails和Python的SQLAlchemy都有迁移工具)。

不管怎样,一旦有了迁移系统,最好使用它来创建初始的数据库表。 docker入口点initdb.d 对于创建初始用户或加载种子数据库转储之类的数据库级设置来说,这样做更有意义,但实际上,对于所描述的更改,您始终需要一个迁移系统。