https://registry.hub.docker.com/_/mysql/ の指示に従って、イメージを取得し、mysqlサーバーを実行するコンテナーを実行しました。コンテナはバックグラウンドで実行されており、いくつかのコマンドを実行します。コンテナに接続し、コマンドラインからこのコマンドを実行する最良の方法はどれですか?
Mysqlコンテナに接続し、次を使用してコマンドを実行できます。
docker exec -it mysql bash -l
(mysql
はコンテナに付けた名前です)
同じイメージからコンテナを次に実行するとき、何をしても永続化されないことに注意してください。
docker exec -i some_mysql_container mysql -uroot -ppassword <<< "select database();"
実行中のMySQLコンテナーにbashに接続します。
$ docker exec -t -i
container_mysql_name
/bin/bash
-i
は--interactive
オプションのショートカットです。このオプションは、接続されていなくてもSTDINを開いたままにするために使用されます
-t
は--tty
オプションのショートカットで、疑似TTYを割り当てるために使用されます
Bash MySQLコンテナからMySQLクライアントを実行します。
$ mysql -uroot -proot
-u
は--user=name
オプションのショートカットで、現在のユーザーでない場合にログインするユーザーを定義するために使用されます。
-p
は-password[=name]
オプションのショートカットであり、サーバーに接続するときに使用するパスワードを定義するために使用されます。パスワードが与えられていない場合は、ttyから尋ねられます。
ディスコ !
@ Abdullah Jibalyソリューションの場合、MySQL 5.7でテストした後、bashターミナルプロンプトにのみ入力されるため、mysqlコマンドを2回入力する必要があります。
1行のコマンドでMySQLコンテナーを実行した後、MySQLコマンドラインクライアントに直接入力するには、次を実行します。
docker exec -it container_mysql_name mysql -u username -p
以下を使用して、コンテナの外部または内部のデータベース(-h
および-P
)をサポートし、-e
をサポートするケースを少なくともいくつか整理するコマンドを作成します。
cat > ~/bin/mysql <<'EOF'
#/bin/bash
MARGS=()
MPORT="3306"
while test $# != 0; do
if [[ $1 == -h ]]; then MHOST=$2; shift;
Elif [[ $1 == -h* ]]; then MHOST=${1#"-h"};
Elif [[ $1 == -e ]]; then MEXEC=$2; shift;
Elif [[ $1 == -e* ]]; then MEXEC=${1#"-e"};
Elif [[ $1 == --execute=* ]]; then MEXEC=${1#"--execute="};
Elif [[ $1 == -P ]]; then MPORT=$2; shift;
Elif [[ $1 == -P* ]]; then MPORT=${1#"-P"};
else MARGS="$MARGS $1"
fi
shift;
done
if [ -z "${MHOST+x}" ]; then
MHOST=localhost
fi
if [ $(docker inspect --format '{{ .State.Status }}' mysql) == "running" ]; then
if [ ! -z "${MHOST+x}" ]; then
if [ "$MHOST" == "localhost" -o "$MHOST" == "127.0.0.1" ]; then
CPORT=$(docker port mysql 3306/tcp)
if [ ${CPORT#"0.0.0.0:"} == $MPORT ]; then
#echo "aiming for container port ($MPORT -> $CPORT)";
MHOST=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mysql);
else
MHOST=$(ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | head -1);
fi
fi
fi
fi
if [ -z "$MEXEC" ]; then
docker run --link mysql:mysql -i --rm mysql mysql "-h" $MHOST "-P" $MPORT $MARGS
else
docker run --link mysql:mysql -i --rm mysql mysql "-h" $MHOST "-P" $MPORT $MARGS <<< $MEXEC
fi
EOF
chmod +x ~/bin/mysql
私の場合、<<<
ソリューションは機能しませんでした。
代わりに-e
を使用しました。
例:
docker exec ${CONTAINER_NAME} mysql -u ${USER_NAME} -p${PASSWORD} -e "drop schema test; create schema test;"