追記:
Dockerが更新されたことで、Docker Execの記載がドキュメントから消えていました。
=====
※原因は未解決ですが、回避はできたので、一旦メモしておきます。
CircleCIだと、Docker Execが使えないため、代替のコマンドで行ってあげる必要があります。
参考
旧URL:http://circleci.com/docs/docker/
https://circleci.com/docs/archive/docker/
リンク先変更がよくあるので検索してください。
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については、勉強中なのでまだ理解が足りていないです。。。
試作3
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としているため表示されます。
ここでは、考慮しません。
コメント