簡體   English   中英

docker-compose mysql 導入失敗 - 輸入設備不是 TTY

[英]docker-compose mysql import failed - the input device is not a TTY

我有任何正在運行的容器。 所以我需要導入 sql 數據庫並嘗試

docker-compose exec MYSQL_CONTAINERNAME mysql -uroot -p --database=MY_DB < /code/export_new.sql

但是我有消息“docker-compose exec -i MYSQL_CONTAINER NAME mysql -uroot -p --database=MY_DB < /code/export_new.sql” 如果我在之后使用“-i”或“-T”或“-it”參數命令“... exec”我有消息:

Usage: exec [options] [-e KEY=VAL...] SERVICE COMMAND [ARGS...]

Options:
    -d, --detach      Detached mode: Run command in the background.
    --privileged      Give extended privileges to the process.
    -u, --user USER   Run the command as this user.
    -T                Disable pseudo-tty allocation. By default `docker-compose exec`
                      allocates a TTY.
    --index=index     index of the container if there are multiple
                      instances of a service [default: 1]
    -e, --env KEY=VAL Set environment variables (can be used multiple times,
                      not supported in API < 1.25)
    -w, --workdir DIR Path to workdir directory for this command.

如何將我的“export_new.sql”導入放在容器中的mysql?

為我工作

docker-compose exec -T MYSQL_CONTAINERNAME mysql databasename < data.sql

像這樣使用docker-compose exec不起作用(不知道為什么),但是您可以使用docker exec 您只需要知道容器名稱或 ID。 名稱在docker-compose up期間列出docker-compose up或者您可以使用docker-compose ps

這是一個示例命令:

docker exec -i MYSQL_CONTAINERNAME mysql databasename < data.sql

或者您可以將docker-compose ps到其中,以便您只需要知道短名稱(在 docker-compose.yml 中定義):

docker exec -i $(docker-compose ps -q MYSQL) mysql databasename < data.sql

另外,請注意,我在使用帶有 -p 標志的上述命令時遇到了麻煩,因此它會以交互方式要求輸入密碼,但是當我在初始命令(例如mysql -uroot -pmypwd )中傳遞密碼時它起作用了。

好的,首先您必須連接到正在運行的 mysql 實例。 您可以使用以下命令執行此操作:

docker run -it --link some-mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

在此命令中,使用實際容器的名稱更改字符串some-mysql 變量對應於:

  • MYSQL_PORT_3306_TCP_ADDR - 主機(默認:本地主機)
  • MYSQL_PORT_3306_TCP_PORT - 端口(默認:3306)
  • MYSQL_ENV_MYSQL_ROOT_PASSWORD - root 用戶的密碼

然后你就可以直接在你的 mysql 實例上執行命令,輸入:

MY_DB < /code/export_new.sql

有關任何故障排除或良好的信息來源,請在此處閱讀有關 mysql docker 映像的信息: https : //hub.docker.com/_/mysql/

如果您的 docker DBMS 有密碼,您應該使用:

docker exec -i MYSQL_CONTAINERNAME mysql databasename_optional -ppassword < data.sql

databasename_optional是可選的,因為某些 DB Dumps 將 DB 名稱設置在它之上,例如:

CREATE DATABASE IF NOT EXISTS `databasename` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `databasename`;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM