docker - 为我的数据库创建Docker容器

标签 docker dockerfile

我有两个问题。

  • 如果我在Dockerfile的FROM命令中添加MySQL镜像,是否可以
    运行MySQL镜像的entrypointCMD?我找不到
    有关的文档。
  • 如何通过以下方式创建可复制的开发数据库容器
    Dockerfile?

  • 我正在尝试创建可复制的开发数据库容器。当前,我使用docker exec命令导入数据库,但是我希望将其组合为一个步骤。

    这是我创建的Dockerfile的内容。
    FROM mysql:5.5.44
    
    COPY sql/devdb.sql /root/
    
    CMD mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < /root/devdb.sql
    

    当我运行它时,出现错误:

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)



    我发现MySQL服务器甚至没有运行,这使我认为没有运行父镜像的命令?

    我在MySQL Docker Registry注释页面中找到了CMD建议,但是我显然做错了。

    我将不胜感激任何帮助。谢谢!

    最佳答案

    1. If I add the MySQL image in my Dockerfile's FROM command, does it run the ENTRYPOINT and CMD of the MySQL image?


    是的,只要您不在自己的Dockerfile中添加自己的ENTRYPOINTCMD指令即可。

    1. How can I create a reproducible development database container via a Dockerfile?


    您缺少的是了解执行 RUN ENTRYPOINT CMD 时的情况。
    RUN指令在构建时执行。当您执行docker build ...时。
    ENTRYPOINTCMD伪指令仅在运行时执行。当您执行docker rundocker start时。

    有了这些知识,现在很清楚为什么在构建时没有MySQL服务器正在运行。结果,您无法在构建时将数据导入MySQL服务器。

    但是,您可以做的是保留COPY指令,以便要启动的容器将准备好导入sql数据,然后还提供您自己的入口点脚本,该脚本将负责(在运行时)执行 /entrypoint.sh 脚本由MySQL镜像提供,然后导入您的sql数据。

    my-custom-entrypoint.sh旁边创建以下Dockerfile文件
    #!/bin/bash
    
    # first things first, call the MySQL image provided entrypoint script
    # "$@" is to pass all parameters as they are provided
    /entrypoint.sh "$@"
    
    # then import the sql data
    mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < /root/devdb.sql
    

    那么你的Dockerfile
    FROM mysql:5.5.44
    
    COPY sql/devdb.sql /root/
    COPY my-custom-entrypoint.sh /
    
    ENTRYPOINT ["/my-custom-entrypoint.sh"]
    

    关于docker - 为我的数据库创建Docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31092870/

    相关文章:

    docker - 使用Minikube的Docker配置portainer

    php - 使用 Docker 在 PhpStorm 中配置代码嗅探器

    docker - COPY dockerfile中没有这样的文件或目录

    docker - 在哪里从 Dockerfile、主机或中间容器执行 RUN 命令?

    django - Docker 容器拒绝连接

    Docker EE 管理 UI 与 Portainer

    dockerfile - 使用具有多阶段构建的 Dockerfile 为每个构建参数命名一个阶段

    c# - 即使在 .NET Core 控制台应用程序中使用 Console.ReadLine(),docker 容器也会立即退出

    Docker 从私有(private) bitbucket repo : Failed to clone repository 自动构建

    ruby - 如何将jekyll安装到Docker镜像?