输入设备不是tty

v9tzhpje  于 2021-06-23  发布在  Mysql
关注(0)|答案(4)|浏览(298)

我有流动的容器。所以我需要导入sql数据库并尝试

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

但是我有消息“docker compose exec-i mysql\u container name mysql-uroot-p--database=my\u db</code/export\u new.sql”如果我在命令后使用“-i”或“-t”或“-it”参数“。。。执行官“我有消息:

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\u new.sql”导入到容器中的mysql?

js4nwp54

js4nwp541#

为我工作

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

sczxawaw2#

好的,首先您必须连接到正在运行的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\u port\u 3306\u tcp\u addr-host(默认:localhost)
mysql\ u port\ u 3306\ u tcp\ u port-端口(默认值:3306)
mysql\u env\u mysql\u root\u password-root用户的密码
然后,您就可以直接在mysql示例上执行命令,只需键入:

MY_DB < /code/export_new.sql

有关任何故障排除或良好的信息来源,请阅读mysql docker image:https://hub.docker.com/_/mysql/

eulz3vhy

eulz3vhy3#

如果docker dbms有密码,则应使用:

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

这个 databasename_optional 是可选的,因为某些db转储会将db名称设置在其上,如:

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

wdebmtf24#

使用 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 ).

相关问题