gpt4 book ai didi

mysql - 在 Dockerfile 中设置 MySQL 并导入转储

转载 作者:IT老高 更新时间:2023-10-28 12:33:11 24 4
gpt4 key购买 nike

我正在尝试为我的 LAMP 项目设置 Dockerfile,但在启动 MySQL 时遇到了一些问题。我的 Dockerfile 上有以下几行:

VOLUME ["/etc/mysql", "/var/lib/mysql"]
ADD dump.sql /tmp/dump.sql
RUN /usr/bin/mysqld_safe & sleep 5s
RUN mysql -u root -e "CREATE DATABASE mydb"
RUN mysql -u root mydb < /tmp/dump.sql

但我不断收到此错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

关于如何在 Dockerfile 构建期间设置数据库创建和转储导入有什么想法吗?

最佳答案

官方最新版mysql docker image允许您在启动时导入数据。这是我的 docker-compose.yml

data:
build: docker/data/.
mysql:
image: mysql
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: 1234
volumes:
- ./docker/data:/docker-entrypoint-initdb.d
volumes_from:
- data

在这里,我在 docker/data 下有我的 data-dump.sql,它与运行 docker-compose 的文件夹相关。我正在将该 sql 文件挂载到容器上的这个目录 /docker-entrypoint-initdb.d 中。

如果您有兴趣了解其工作原理,请查看他们的 docker-entrypoint.sh在 GitHub 中。他们已添加此 block 以允许导入数据

    echo
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh) echo "$0: running $f"; . "$f" ;;
*.sql) echo "$0: running $f"; "${mysql[@]}" < "$f" && echo ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done

附加说明,如果您希望数据即使在 mysql 容器停止和删除后仍然存在,您需要有一个单独的数据容器,如您在 docker-compose.yml 中看到的那样。数据容器Dockerfile的内容很简单。

FROM n3ziniuka5/ubuntu-oracle-jdk:14.04-JDK8

VOLUME /var/lib/mysql

CMD ["true"]

数据容器甚至不必处于启动状态即可持久化。

关于mysql - 在 Dockerfile 中设置 MySQL 并导入转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25920029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com