(単に自分用のメモです。お急ぎの方は次行っちゃってください。でも初心者の方には役立つ情報もあるかも?)
IBM MQの評価のため、15分でWebSphere MQの環境を構築しメッセージの読み書きを行うというページに従ってコマンドを実行し、Docker コンテナ内で MQ が正常に動作することを確認しました。
次はこれを(練習のため)ansible に組み込もうと、VirtualBox + Vagrant + CentOS 7.2 の環境で以下のような ansible playboook を書きました(抜粋)。
- name: Building docker container
docker_image:
path: "{{ ansible_user_dir }}/mq-docker/8.0.0/"
name: mq
tag: mq
( ansible 2.2 では docker モジュールは deprecated のようですので、docker_imageを使いました。
で、実行してみると、以下のようなエラーが発生しました。
TASK [mq-docker : Building docker container] ***********************************
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "Error connecting: Error while fetching server API version: ('Connection aborted.', error(13, '\\xe8\\xa8\\xb1\\xe5\\x8f\\xaf\\xe3\\x81\\x8c\\xe3\\x81\\x82\\xe3\\x82\\x8a\\xe3\\x81\\xbe\\xe3\\x81\\x9b\\xe3\\x82\\x93'))"}
エラーメッセージが文字化けしてよくわからんので(なんとなく想像はつくけど)、PHP で解読してみました。
vagrant@mq-docker:~/temp$ cat a.php
<?php
$a = '\\xe8\\xa8\\xb1\\xe5\\x8f\\xaf\\xe3\\x81\\x8c\\xe3\\x81\\x82\\xe3\\x82\\x8a\\xe3\\x81\\xbe\\xe3\\x81\\x9b\\xe3\\x82\\x93';
echo hex2bin(preg_replace("/x/", "", preg_replace("/\\\\/", "", $a))) . "\n";
vagrant@mq-docker:~/temp$ php a.php
許可がありません
やはり Permission Denied でしたね。
本当は ( ansbible / python / bash / docker のいずれか)がエラーメッセージを変にエンコードしないようにできればいいのでしょうけど、自分の実力では無理なので、諦めて以下のようにしました。
vagrant@mq-docker:~$ LANG=C ansible-playbook /etc/ansible/jobs/mq-docker.yml
(略)
TASK [mq-docker : Building docker container] ***********************************
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "Error connecting: Error while fetching server API version: ('Connection aborted.', error(13, 'Permission denied'))"}
これで正しくエラーを認識できるようになったので、次に進めます。
結論:そもそも日本語モードとか使うな?