gpt4 book ai didi

docker - 首次运行时Docker脚本未连接(SQL Dump)

转载 作者:行者123 更新时间:2023-12-02 18:22:14 25 4
gpt4 key购买 nike

我正在尝试通过docker和脚本运行mysql。一切正常,运行它会创建用户和数据库。我可以使用工作台连接到它,但是它不运行dump.sql
我收到以下错误

Access denied for user 'userxx'@'localhost' (using password: YES)



但是,如果我再次运行脚本,它将连接并运行 dump.sql
这是我的脚本:
#!/bin/sh

echo "Starting DB..."
docker run --name test_db -d \
-e MYSQL_ROOT_PASSWORD=test2018 \
-e MYSQL_DATABASE=test -e MYSQL_USER=test_user -e MYSQL_PASSWORD=test2018 \
-p 3306:3306 \
mysql:latest

# Wait for the database service to start up.
echo "Waiting for DB to start up..."
docker exec test_db mysqladmin --silent --wait=30 -utest_user -ptest2018 ping || exit 1

# Run the setup script.
echo "Setting up initial data..."
docker exec -i test_db mysql -utest_user -ptest2018 test < dump.sql

我究竟做错了什么 ?还是有办法通过Dockerfile运行转储,因为我无法做到这一点?

最佳答案

如果运行docker run --help,您将看到这些标志

  --health-cmd string              Command to run to check health
--health-interval duration Time between running the check (ms|s|m|h) (default 0s)
--health-retries int Consecutive failures needed to report unhealthy
--health-start-period duration Start period for the container to initialize before starting health-retries countdown (ms|s|m|h) (default 0s)
--health-timeout duration Maximum time to allow one check to run (ms|s|m|h) (default 0s)

因此,您可以使用这些命令通过提供的命令检查运行状况。在您的情况下,该命令是
mysqladmin --silent -utest_user -ptest2018 ping

现在以波纹管方式运行
docker run --name test_db -d \
-e MYSQL_ROOT_PASSWORD=test2018 \
-e MYSQL_DATABASE=test -e MYSQL_USER=test_user -e MYSQL_PASSWORD=test2018 \
-p 3306:3306 \
--health-cmd="mysqladmin --silent -utest_user -ptest2018 ping" \
--health-interval="10s" \
--health-retries=6 \
mysql:latest

如果运行 docker ps,您将看到
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                             PORTS                    NAMES
5d1d160ed7de mysql:latest "docker-entrypoint.s…" 16 seconds ago Up 16 seconds (health: starting) 0.0.0.0:3306->3306/tcp test_db

您将在状态中看到 health: starting

最后,您可以使用它来等待。当您的mysql准备就绪时,运行状况将为 healthy

因此,如下修改您的脚本
#!/bin/bash

docker run --name test_db -d \
-e MYSQL_ROOT_PASSWORD=test2018 \
-e MYSQL_DATABASE=test -e MYSQL_USER=test_user -e MYSQL_PASSWORD=test2018 \
-p 3306:3306 \
--health-cmd="mysqladmin --silent -utest_user -ptest2018 ping" \
--health-interval="10s" \
--health-retries=6 \
mysql:latest

# Wait for the database service to start up.
echo "Waiting for DB to start up..."
until [ $(docker inspect test_db --format '{{.State.Health.Status}}') == "healthy" ]
do
sleep 10
done

# Run the setup script.
echo "Setting up initial data..."
docker exec -i test_db mysql -utest_user -ptest2018 test < dump.sql

在这里,以下命令返回运行状况
docker inspect test_db --format '{{.State.Health.Status}}'

等待直到恢复健康。

Note: I have used #!/bin/bash in script

关于docker - 首次运行时Docker脚本未连接(SQL Dump),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48965432/

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