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

スポンサーリンク

追記:
Dockerが更新されたことで、Docker Execの記載がドキュメントから消えていました。

Welcome to CircleCI Documentation - CircleCI
Welcome to CircleCI Documentation

=====
※原因は未解決ですが、回避はできたので、一旦メモしておきます。
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としているため表示されます。
ここでは、考慮しません。

コメント

タイトルとURLをコピーしました