在Docker容器启动时运行SQL脚本。

huangapple go评论100阅读模式
英文:

Run sql script on docker container startup

问题

所以我有一个SQL脚本,用于添加新用户、数据库,切换到新数据库并创建一些表格。

这是我的docker-compose.yaml:

  1. version: '3'
  2. services:
  3. db:
  4. container_name: my_db
  5. image: mariadb
  6. restart: always
  7. volumes:
  8. - ./init:/docker-entrypoint-initdb.d
  9. environment:
  10. MYSQL_ROOT_PASSWORD: password
  11. volumes:
  12. my_db:

我还尝试在docker-compose文件中添加 command: --init-file ./init/init_db.sql 之类的内容,但没有成功。

这是从docker-compose up输出的内容:

  1. Starting my_db ... done
  2. Attaching to my_db
  3. my_db | 2023-05-21 17:54:10+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.11.3+maria~ubu2204 started.
  4. ...
  5. ...
  6. my_db | Version: '10.11.3-MariaDB-1:10.11.3+maria~ubu2204' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution

我还尝试过在dockerfile中进行一些操作,但目前我没有使用任何dockerfile,我对Docker仍然相当新手。

另外,我想在docker-compose文件的environment字段中设置新用户和密码组合,但似乎没有生效,这就是为什么用户创建部分在entrypoint脚本中的原因。

英文:

So I have a sql script that add a new user, database, switches to the new db and creates some tables.
I've been trying to run this script when I run docker-compose up but I can't manage to do so.

Here is my docker-compose.yaml :

  1. version: '3'
  2. services:
  3. db:
  4. container_name: my_db
  5. image: mariadb
  6. restart: always
  7. volumes:
  8. - ./init:/docker-entrypoint-initdb.d
  9. environment:
  10. MYSQL_ROOT_PASSWORD: password
  11. volumes:
  12. my_db:

I've also tried adding command: --init-file ./init/init_db.sql things like that to the docker-compose file, but without any success.

Here is the output from docker-compose up :

  1. Starting my_db ... done
  2. Attaching to my_db
  3. my_db | 2023-05-21 17:54:10+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.11.3+maria~ubu2204 started.
  4. my_db | 2023-05-21 17:54:10+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
  5. my_db | 2023-05-21 17:54:10+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.11.3+maria~ubu2204 started.
  6. my_db | 2023-05-21 17:54:10+00:00 [Note] [Entrypoint]: MariaDB upgrade not required
  7. my_db | 2023-05-21 17:54:10 0 [Note] Starting MariaDB 10.11.3-MariaDB-1:10.11.3+maria~ubu2204 source revision 0bb31039f54bd6a0dc8f0fc7d40e6b58a51998b0 as process 1
  8. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
  9. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: Using transactional memory
  10. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: Number of transaction pools: 1
  11. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
  12. my_db | 2023-05-21 17:54:10 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
  13. my_db | 2023-05-21 17:54:10 0 [Warning] mariadbd: io_uring_queue_init() failed with ENOSYS: check seccomp filters, and the kernel version (newer than 5.1 required)
  14. my_db | 2023-05-21 17:54:10 0 [Warning] InnoDB: liburing disabled: falling back to innodb_use_native_aio=OFF
  15. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
  16. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: Completed initialization of buffer pool
  17. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: File system buffers for log disabled (block size=4096 bytes)
  18. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: 128 rollback segments are active.
  19. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
  20. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
  21. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: log sequence number 47126; transaction id 16
  22. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
  23. my_db | 2023-05-21 17:54:10 0 [Note] Plugin 'FEEDBACK' is disabled.
  24. my_db | 2023-05-21 17:54:10 0 [Warning] You need to use --log-bin to make --expire-logs-days or --binlog-expire-logs-seconds work.
  25. my_db | 2023-05-21 17:54:10 0 [Note] InnoDB: Buffer pool(s) load completed at 230521 17:54:10
  26. my_db | 2023-05-21 17:54:10 0 [Note] Server socket created on IP: '0.0.0.0'.
  27. my_db | 2023-05-21 17:54:10 0 [Note] Server socket created on IP: '::'.
  28. my_db | 2023-05-21 17:54:10 0 [Note] mariadbd: ready for connections.
  29. my_db | Version: '10.11.3-MariaDB-1:10.11.3+maria~ubu2204' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution

I tried some things with the dockerfile as well, but I'm not using any right now, I'm still fairly new to docker.

Little addition, I wanted to setup a new user and password combo inside the environment field in the docker-compose file, but it didn't seem to work, that's why the user creation part is inside the entrypoint script.

答案1

得分: 2

我在进行修改并将此脚本添加为启动脚本之前创建了容器。我必须先移除容器 docker container rm <container id> 然后再次运行 docker-compose up

英文:

I created the container before making the modifications and adding this script as the startup script. I had to remove the container first docker container rm &lt;container id&gt; and then run docker-compose up again.

huangapple
  • 本文由 发表于 2023年5月22日 02:10:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/76301277.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定