Команда запуска Docker с импортом MySQL - PullRequest
2 голосов
/ 12 марта 2019

Я использую 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"]

журналы неудачного запуска контейнера показывают, что он не распознает команду: enter image description here

enter image description here enter image description here

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Я решил это путем создания сценария

#!/bin/sh

mysql -h ${1} -u ${2} -p${3} ${4} < ${5}

, когда я запускаю команду:

docker run imageName myScript HostParam UserPram PasswordParam DBName FileName 

она работает

1 голос
/ 12 марта 2019

В Linux <> означает ввод-вывод из ресурса, а оболочка Linux разбивает команду на 2 части, одну из которых - как ввод-вывод, а другую - в какой поток необходимо передать.

Теперь и с командой docker это две команды docker run -it CONTAINER mysql -h localhost -u user-ppassword dbName <</strong> /tmp/21336/sql/data/import_file.sql. Более того, файл /tmp/21336/sql/data/import_file.sql ищется на хост-компьютере.

...