Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 构建docker后如何运行程序_Mysql_Docker - Fatal编程技术网

Mysql 构建docker后如何运行程序

Mysql 构建docker后如何运行程序,mysql,docker,Mysql,Docker,我正在努力构建一个docker映像,它将创建一个mysql docker容器。我有一个我写的小程序,它将创建我需要的数据库,并执行一些例行程序,将一些数据推送到数据库中。问题是我需要编程,以便在容器构建时自动执行 如果我手动运行该程序,它可以正常工作,但当我尝试在dockerfile或docker-entrypoint.sh中运行它时,它从未运行过。当容器运行此脚本时,服务器似乎没有完全启动,或者至少不能通过localhost访问?我想在docker容器构建之后,还有其他方法来运行自定义程序吗?

我正在努力构建一个docker映像,它将创建一个mysql docker容器。我有一个我写的小程序,它将创建我需要的数据库,并执行一些例行程序,将一些数据推送到数据库中。问题是我需要编程,以便在容器构建时自动执行

如果我手动运行该程序,它可以正常工作,但当我尝试在dockerfile或docker-entrypoint.sh中运行它时,它从未运行过。当容器运行此脚本时,服务器似乎没有完全启动,或者至少不能通过localhost访问?我想在docker容器构建之后,还有其他方法来运行自定义程序吗?还是解决方案正在我尝试访问数据库的过程中

编辑 这就是我的docker撰写文件内容

 db:
    build: ./databaseDocker
    volumes:
        - ./database:/var/lib/mysql
    environment: 
      MYSQL_DATABASE: 'MyDatabaseName'
      MYSQL_USER: 'company_root'
      MYSQL_PASSWORD: '12345'
      MYSQL_ROOT_PASSWORD: '123456'
    ports: 
        - 3306:3306
    networks:
      - app-network
./databaseDocker文件夹中的Dockerfile

FROM mysql:5.7.34
COPY ./dbseeder /tmp/dbseeder 
WORKDIR /tmp/dbseeder
RUN chmod 777 .
COPY ./db_custom_init.sh /docker-entrypoint-initdb.d/
EXPOSE 3306
包含我正在运行的命令的db_custom_init.sh文件

./DBSeedApp Param1 Param2
该应用程序是在家编写的,使用.net core根据一些参数在数据库中播种数据。应用程序正在尝试连接到数据库,如下所示:

string connectionString = $"server={host};port={port};user={username};pwd={password};database={databaseName};";
        using (MySqlConnection conn = new MySqlConnection(connectionString))
        {
            using (MySqlCommand cmd = new MySqlCommand())
            {
               
                 cmd.Connection = conn;
                 conn.Open();
                 //do stuff
                 conn.Close();
            }
        }
我可能不喜欢的一种解决方案是将数据种子植入外部数据库,并将SQL备份转储到docker容器中,以便直接通过mysql cli执行。但是,这种方法似乎不太有效,我确实希望直接使用docker mysql服务器

新尝试 我更改了我的初始化文件:

echo "Check DB!"
while ! mysqladmin ping -h localhost -u root -p123456; do
    echo "Wait ..."
    sleep 1
done
echo "DB ready!"
./DBSeedApp Param1 Param2
但运气不好,我也在程序中添加了以下内容:

 private void VerifyConnections()
    {
        try
        {
            string connectionString = $"server={host};port={port};user={username};pwd={password};";
            using (MySqlConnection conn = new MySqlConnection(connectionString))
            {
                System.Console.WriteLine($"Trying to connect to {host}");
                conn.Open();
                System.Console.WriteLine($"Connection successful to {host}");
                conn.Close();
            }
        }
        catch (Exception)
        {

            System.Console.WriteLine($"Cannot connect to {host}");
        }
        
    }
但是运气不好,它证实了我找不到localhost db服务器。我还尝试指定db容器名称,但也不起作用

让它工作,但。。。 我用一个肮脏的黑客让它工作。我使用一个外部mysql服务器“构建我的种子”,然后从这个外部服务器转储一个sql文件

最后,我在程序上创建了一个dump参数,告诉它连接到外部服务器,构建种子,然后将其导出到sql文件中

然后我在init.sh文件上运行它

./dbseedapp DUMP param1 param2 ...
mysql -u root -p mydbname --binary-mode < /tmp/dbseeder/temp/dump.sql
/dbseedapp DUMP param1 param2。。。
mysql-u root-p mydbname——二进制模式
我曾经从外部mysql服务器生成sql文件


我想找到另一个解决方案,但目前这是我想到的最好的解决方案。如果有人有更好的主意。。。让我知道。

如果您使用的是官方MySQL映像,这可能会对您有所帮助

第一次启动容器时,将创建具有指定名称的新数据库,并使用提供的配置变量初始化该数据库。此外,它将执行扩展名为
.sh、.sql和.sql.gz
的文件,这些文件位于
/docker entrypoint initdb.d
中。文件将按字母顺序执行


因此,如果您想在容器中推送一些数据,只需将备份文件
.sql
与此目录中的数据一起放置,
/docker entrypoint initdb.d
当容器启动时,它将初始化数据

检查docker compose我正在使用docker compose。。。我不明白这对我有什么帮助?你能进一步解释一下吗?你能发布shell脚本和docker文件吗?在没有看到代码的情况下很难确定问题所在。这是否回答了您的问题?在不知道具体问题的情况下,一种解决方案可能是检查服务器是否已启动并正在运行。看,这不是我的情况,我真的需要使用一个程序,将种子数据到数据库中。数据不能包含在sql文件中。。。我将尝试找到一种方法来转储SQL文件,但在此之前我仍然需要执行该程序@AlexandreSamson@AlexandreSamson是吗try@AlexandreSamson对不起,堆栈溢出移动应用程序是坏的,我的电脑崩溃了,这是一个好主意。。。但我不知道具体怎么做。我试试看