重新启动Docker Compose并更新数据库

约翰·比斯利

我一直在使用Docker Compose处理一个简单的MySQL表,该表仅包含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-COMPOSE RESTART。

我能够在控制台中打印的错误消息是:

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

这使我相信我没有正确重启Docker Compose。

如何重新启动Docker Compose,使其运行CREATE TABLE命令?

编辑

这是我的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:

我的Dockerfile看起来像这样:

FROM php:7.0.30-apache 
RUN docker-php-ext-install mysqli
大卫·迷兹

docker-entrypoint-initdb.d机制仅在数据库容器为空时第一次启动。您需要docker-compose rm在容器之后显式docker-compose stop地删除它们,以导致当前数据库被删除,然后在新的空数据库中创建一个新的空表。

如果需要将数据保留在现有数据库中,则需要寻找一种称为migration的机制各种Docker数据库映像没有直接的迁移支持;这几乎总是与应用程序级数据库库一起打包的(例如,Ruby on Rails和Python的SQLAlchemy都具有迁移工具)。

无论如何,一旦有了迁移系统,最好使用它来创建初始数据库表。docker-entrypoint-initdb.d对于数据库级别的设置(如创建初始用户或加载种子数据库转储)而言,它更具意义,但实际上,您将始终需要一个迁移系统来进行所描述的更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

docker-compose重新启动间隔

更新后容器始终在docker-compose.yml中没有重新启动并重新启动

docker-compose-重新启动单个服务的问题

如何使用docker-compose重新启动单个容器

docker-compose 在失败时重新启动

docker-compose重新启动策略-禁用两次重新启动之间的指数延迟

应用程序重新启动,同时更新Firebase数据库中的数据

重新启动Docker后Docker Compose无法启动服务网络

即使重新启动活动,SQLite数据库项目也会在重新启动后返回

Tomcat需要在数据库重新启动后重新启动

ALTER SYSTEM和数据库重新启动

CherryPy Ping数据库连接或重新启动连接

重新启动后在Postgres中丢失数据库

重新启动Azure Postgresql数据库

重新启动后无法登录Oracle数据库

在不重新启动应用程序的情况下更新SQLite数据库

docker-compose-是否可以在不重新启动容器的情况下更新标签?

更新后重新启动

如何在容器故障时使用 docker-compose 重新启动 docker 容器

Golang Docker容器未在Docker-Compose中重新启动

为什么Docker Compose重新启动会渲染容器输出的次数越来越多?

如何在PyCharm的运行配置中重新启动链接的Docker Compose服务?

重新启动后的Django docker-compose需要再次迁移

运行 rake assets:precompile 后重新启动 docker-compose 会重置更改

certbot更新后如何从docker内部重新启动主机nginx

数据库重新启动后,hibernate和c3p0 PooledConnection不会更新连接

如何在更改容器后获取正确的数据并在 docker 中重新启动容器

如果docker重新启动,为什么我会丢失数据?

Spring Boot-重新启动后重新连接到数据库