docker-compose mysql导入失败 - 输入设备不是TTY

时间:2018-05-25 11:47:59

标签: mysql docker docker-compose

我有任何正在运行的容器。所以我需要导入sql数据库并尝试

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

但我有消息&#34; docker-compose exec -i MYSQL_CONTAINER NAME mysql -uroot -p --database = MY_DB&lt; /code/export_new.sql"如果我使用&#34; -i&#34;或&#34; -T&#34;或&#34; -it&#34;命令后的参数&#34; ... exec&#34;我有消息:

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.

如何导入我的&#34; export_new.sql&#34;进入mysql,放在容器中?

4 个答案:

答案 0 :(得分:1)

像这样使用docker-compose exec无效(不知道为什么),但是您可以使用docker exec。您只需要知道容器名称或ID。名称在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)中传递密码时,该命令就起作用了。

答案 1 :(得分:1)

与我一起工作

-lsfml-system -lsfml-window -lsfml-graphics

答案 2 :(得分:0)

好的,首先你必须连接到正在运行的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 - host(默认值:localhost)
  • MYSQL_PORT_3306_TCP_PORT - port(默认值:3306)
  • MYSQL_ENV_MYSQL_ROOT_PASSWORD - root用户的密码

然后你就可以直接在你的mysql实例上执行命令,只需键入即可:

MY_DB < /code/export_new.sql

有关任何疑难解答或良好的信息来源,请在此处阅读有关mysql docker image的信息: https://hub.docker.com/_/mysql/

答案 3 :(得分:0)

如果您的Docker DBMS具有密码,则应使用:

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

databasename_optional是可选的,因为某些数据库转储会在其顶部设置数据库名称,例如:

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