PHP
Docker
Ansible
mq

docker_image が吐くエラーが文字化けして読めなかった件

More than 1 year has passed since last update.

(単に自分用のメモです。お急ぎの方は次行っちゃってください。でも初心者の方には役立つ情報もあるかも?)

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'))"}

これで正しくエラーを認識できるようになったので、次に進めます。

結論:そもそも日本語モードとか使うな?