【问题标题】:Docker Run command with MySQL import带有 MySQL 导入的 Docker 运行命令
【发布时间】:2019-03-14 16:59:17
【问题描述】:

我正在使用 dockerode 来创建和运行容器。 我正在尝试将数据导入 MySQL。 我的代码:

docker.run('img_cwd',['mysql',
        '-h', 'localhost',
        '-u', 'user',
        `-ppassword`,
        'dbName',
        '<',
        `/tmp/21336/sql/data/import_file.sql"`],
    [process.stdout, process.stderr],
    {
        Tty: false,
        name: nameGenerator.getContainerName(),
        AttachStdin: true,
        OpenStdin: true,
        StdinOnce: true,
        HostConfig: {
            Binds: ['/C/tmp:/tmp']
        }
    })

在 C:/tmp 下我必须文件夹“21336”

运行我的代码后,我看到导入没有发生,并且 docker ps 命令显示:

15d405443805af1a2635e7bc456311de741352ff4ae6b1efb3d43cb10a73d62c   img_cwd             "mysql -h localhost -u user-ppassword dbName < /tmp/21336/sql/data/import_file.sql"   9 seconds ago       Exited (1) 8 seconds ago                       Import_b01k8qr29jh868vf0959cy_Data

当我使用“-it”标志启动容器并运行 导入命令:

mysql -h localhost -u user-ppassword dbName < /tmp/21336/sql/data/import_file.sql

效果很好。

我使用的图片:

   FROM alpine:3.9 
   RUN apk update && \
        apk add --no-cache mysql-client
   CMD ["/bin/sh"]

失败容器运行的日志显示它无法识别该命令 :

【问题讨论】:

    标签: mysql node.js docker dockerode


    【解决方案1】:

    在 Linux 上, 表示来自资源的输入输出,Linux shell 将命令分为两部分,一是作为输入|输出,另一部分是需要传递的流。

    现在也使用 docker 命令,这是两个命令 docker run -it CONTAINER mysql -h localhost -u user-ppassword dbName /tmp/21336/sql/data/import_file.sql。此外,/tmp/21336/sql/data/import_file.sql 文件正在主机中查找。

    【讨论】:

    • 感谢您的解释,它帮助我理解了如何解决它
    【解决方案2】:

    我通过创建脚本解决了这个问题

    #!/bin/sh
    
    mysql -h ${1} -u ${2} -p${3} ${4} < ${5}
    

    当我运行命令时:

    docker run imageName myScript HostParam UserPram PasswordParam DBName FileName 
    

    有效

    【讨论】:

      猜你喜欢
      • 2017-09-16
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多