[CircleCI]Docker Execの代替コマンドについて注意

※原因は未解決ですが、回避はできたので、一旦メモしておきます。

CircleCIだと、Docker Execが使えないため、代替のコマンドで行ってあげる必要があります。

■参考

docker exec を行うと以下のようなエラーが表示されます。

Unsupported: Exec is not supported by the lxc driver

そして、対策として上記のdocsにも記載されいてるようなコマンドで置き換える必要があります。

sudo lxc-attach -n "$(docker inspect --format "{{.Id}}" $MY_CONTAINER_NAME)" -- bash -c $MY_COMMAND

自分の読み間違いなのか、CircleCIのOSがUbuntu14.04/12.04では、上記での置き換えで”/usr/bin/mysql”を実行しようとすると、うまく行きませんでした。

■環境変数
MY_CONTAINER_NAME:コンテナー名
MY_COMMAND:/usr/bin/mysql -u root -pmysql -e ‘SET 〜〜〜略〜〜〜’
 ※ひとまずは、ユーザ名がrootでパスワードがmysqlとしています。

・そのまま置き換えた場合

$ sudo lxc-attach -n "$(docker inspect --format "{{.Id}}" $MY_CONTAINER_NAME)" -- bash -c $MY_COMMAND
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

 →MY_COMMANDがlsとかだったらうまく動きました。
 また、CircleCIのUbuntu OS へ SSHで入り、更に、MY_CONTAINER_NAME のdockerに入って、MY_COMMANDを行って上げた場合は、上記のエラーは発生せずに期待通りの処理が行われました。

・試作1 bashのmanページを見る前にオプションを外してみた

$ sudo lxc-attach -n "$(docker inspect --format "{{.Id}}" $MY_CONTAINER_NAME)" -- bash $MY_COMMAND
/usr/bin/mysql: /usr/bin/mysql: cannot execute binary file

 →本当に単に試しただけ


・試作2 そもそもbash要らないんじゃない?
$ sudo lxc-attach -n "$(docker inspect --format "{{.Id}}" $MY_CONTAINER_NAME)" -- $MY_COMMAND
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1059 (42000): Identifier name '@@GLOBAL.sql_mode="〜〜〜省略〜〜〜' is too long

 →おしい、省略の部分が文字超過で引っかかった。mysqlについては、勉強中なのでまだ理解が足りていないです。。。

・MY_COMMANDの変数が長くて不安なので、mysqlのコマンド部分を直接入力してみよう

$ sudo lxc-attach -n "$(docker inspect --format "{{.Id}}" $MY_CONTAINER_NAME)" -- /usr/bin/mysql -u root -p”設定しているパスワード -e 'SET 〜〜〜略〜〜〜'
mysql: [Warning] Using a password on the command line interface can be insecure.

 →いけた!!!なんでだろうか。MY_COMMANDの設定方法が間違っているのかな?
  落ち着いたら調べたい。(調べなさそう)

※なお、mysqlのWarningは、ユーザ名がrootでパスワードがmysqlとしているため

a

スポンサーリンク







シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク