我发现了docker入口点initdb。请参阅MySQL文档“如何使用此映像”中的“初始化新实例”部分。但当我在包含docker compose的目录中运行docker compose up时。下面的yml文件,我的数据库未初始化。
services:
# Use root/root as MySQL user/password credentials
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_DATABASE: db
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d/:ro
adminer:
image: adminer
restart: always
ports:
- 8080:8080
我确认了./mysql/init
目录包含一个名为init.sql
的文件。我确认清空./mysql/data
目录并运行docker-compose up
后,创建了db
数据库。但是数据库没有填充,除非我在Adminer中手动执行脚本。(我单击“导入”,然后选择文件并按执行按钮。)
在运行docker compose up之后,我在控制台输出中查找指示尝试运行初始化的消息。sql,找不到任何内容。
更新:MySQL版本为8.0.19。
魔鬼隐藏在细节中...
您的env vars中有root
的双重定义。root
用户默认使用MYSQL_ROOT_PASSWORD
中的密码创建。然后您要求创建第二个“普通”用户...具有完全相同的名称和密码(即MYSQL_USER
和MYSQL_PASSWORD
)
如果你仔细查看你的启动日志你会看到一个错误
db_1 | ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'root'@'%'
这实际上停止了对docker入口点initdb中init文件的进一步处理。然后继续图像启动过程的其余部分(即在临时服务器上初始化后重新启动mysql)。
只需在env vars中删除MYSQL\u USER和MYSQL\u PASSWORD,或者设置一个不同于root的用户,您就会立即看到init文件被处理(不要忘记再次清空数据目录)。
我试图让我的docker db容器在创建时自动用数据集填充数据库。根据mariadb留档,卷中有一个文件夹可用于此目的。 我设置了我的文件来镜像我在StackOverflow上找到的示例,但是仍然无法执行我的SQL脚本。以下是我的文件的相关部分: 在文件,我有一个文件: 在每次测试迭代之前,我会清理所有旧的/缓存的Docker内容: 我发现这实际上并没有删除数据库卷。运行仍会显示过去存在的卷 Do
问题内容: 我正在尝试在MySQL容器启动时创建多个数据库。根据https://github.com/docker- library/mysql/pull/18 ,我可以在映像的中装载或复制脚本,它们将在启动时自动执行。 但是我的脚本根本没有执行。好像在目录中看不到文件。 这是我的Dockerfile: 这是我的: 我构建并运行容器: 当我在tty中访问容器时,可以看到处于,但未执行。 我看到了输
问题内容: 我希望服务器每分钟执行一次节点脚本。如果我手动执行文件(),该程序将完美执行,因此,我很确定这不是问题。但是,当我将其交给cron执行时,什么也没发生。 这是cron文件中的行。 这是一个示例日志: 可执行文件: 知道我为什么要广播静音吗?我应该在其他地方调试? 更新: 我相信问题与我的相对文件路径有关,并且main.js从其自己的目录外部执行。 所以现在,我已经放置在目录中。看起来像
根据此堆栈溢出问题的公认(且唯一)答案, 使用 将改为零初始化对象。 那么,为什么呢?, 生成此输出: 定义的两个构造函数都是默认的?正当对于POD类型,默认初始化为零初始化。 根据这个问题的公认答案, 如果POD成员未在构造函数中初始化,也未在类初始化中通过C11初始化,则默认为已初始化。 不管是堆栈还是堆,答案都是一样的。 在C 98中(而不是之后),new int()被指定为执行零初始化。
如果我有: 很明显,这个表达式后面的应该是零,但我看到的任何地方,他们都说这个代码的行为是未定义的,而不仅仅是的值(直到减法之前)。 很明显,编译器可以简单地在变量中使用它认为“方便”的任何垃圾值,并且它将按照预期工作。这种方法有什么问题?
这将打印出r1 r4 pre b1 b2 r3 r2 hawk 但我不明白为什么它打印r3 r2而不是r2 r3,这似乎是倒退的。如果初始化块是自上而下执行的,为什么它从底部语句r3开始,到R2结束呢?在超类Bird中,它的执行方式与我预期的b1和b2一样,从上到下,但在超类Raptor中,在构造函数运行之后,控件似乎首先跳转到最后一条语句,并将自己工作回顶部。有什么想法吗? 快把我逼疯了。