DockerToolBoxでPython日本語表示(やや強引)

Pocket

以下の書籍を使って、Pythonスクレイピング学習中です。

【学習環境】
・使用PC(OS):Windows 10
・Python動作環境(OS):Docker ToolBox上のUbuntu
・Python:3.5.2

さっそく日本語が表示されない問題が発生し、回避に手間取りました。

UnicodeEncodeErrorが発生する理由や、バイナリと文字列の扱いの違いなどを色々調べましたが、結局のところはコマンドプロンプトとLinux側の日本語環境の問題でした。

原因はDockerToolBoxを操作しているCUI画面がコマンドプロンプトベースのため、UTF-8の文字コードを扱えないからだと思われます。PowerShellからどうにかできないか、chcpで文字コードを変えられないか等、色々試してみましたが解決できず。

今回は時間の都合もあって以下のように無理矢理、問題を回避しました。
【Pythonプログラムの実行結果をTeraTerm(SSH接続)から確認する】

適切でない対応だと思いますが、まあ今回はスクレイピングを学習したいので手っ取り早くこの問題から逃れます。

対応は以下。
①Python動作環境(Ubuntu)にSSHインストール
②Python動作環境(Ubuntu)にSSH用ユーザー作成
③Python動作環境(Ubuntu)に日本語環境構築
④DockerToolBoxからコンテナ(Python動作環境(Ubuntu))起動時にポートフォワード
⑤SSH起動後、TeraTermから接続

①Python動作環境(Ubuntu)にSSHインストール
 (1)Docker Quickstart Terminalを起動
 (2)Docker Quickstart Terminalから以下コマンド等でコンテナ(Ubuntu)を起動
  

doccker run -it リポジトリ:タグ

 (3)起動したコンテナでapt-get更新。
  

apt-get update

 (4)コンテナでSSHサーバインストール。
  

apt-get -y install openssh-server

②Python動作環境(Ubuntu)にSSH用ユーザー作成
 (1)コンテナでSSH接続用ユーザ作成。
  

adduser ユーザ名

 (2)コンテナでSSH接続用ユーザをsudoグループに追加
  

gpasswd -a user sudo

③Python動作環境(Ubuntu)に日本語環境構築
 (1)コンテナで日本語パック導入
  

apt-get -y install language-pack-ja

 (2)コンテナで言語設定変更
  

export LANG=ja_JP.UTF-8

 (3)コンテナでデフォルト言語設定変更
  

update-locale LANG=ja_JP.UTF-8

※ここまででUbuntu環境を更新しておく
 コンテナを抜ける。
 

exit

 Docker Quickstart Terminalから以下のコマンド等で更新をかける。
 

docker commit コンテナID リポジトリ:タグ

③DockerToolBoxからコンテナ(Python動作環境(Ubuntu))起動時にポートフォワード
 (1)Docker Quickstart Terminalを使い、コマンド「doccker run -it -p 適当なポート:22 リポジトリ:タグ」等でコンテナ(Ubuntu)を起動
④SSH起動後、TeraTermから接続
 (1)コンテナでSSH起動
  

/etc/init.d/ssh start

  ※自動起動設定を入れてみたが、コンテナ起動時にSSH自動起動はできなかったため手動で起動
 (2)TeraTerm等のSSH接続ツールを使い、③(1)で指定したポートに接続
  ※接続時のユーザID/パスワードは②で作成したもの
  ※接続先IPが分からない場合、VirtualBoxにある仮想マシンdefaultに一旦接続してコマンド「ifconfig | less」等を打ち込んでみると、eth1等にホストOSと同ネットワークのIPアドレスを見つけられる
   (仮想マシンdefaultをダウンさせるとDocker Quickstart Terminalも停止するので注意

【おまけ】
ネットワークがうまくつながらない場合、仮想マシンdefaultやコンテナのファイル「/etc/resolv.conf」にnameserver 8.8.8.8を追記するとよいかも

広告

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です