2017年4月10日月曜日

[Docker] 始めてみたけど躓きまくってるので備忘録として残しておくよ

注意:有益な情報はありません
完全な個人用メモです。
それでも引っかかる情報はあるかもしれませんが、今すぐバックすることをおすすめします。
自分でも調べてて感じましたが、変化が激しいので古い情報はすでに当てはまらないことがあります。
検索ツールで期間を絞ったり、バージョンを絞ったりして調べることをおすすめします。

前提条件

* Windows + Docker Toolbock
* Windows 10

VBoxManage.exe: error: Failed to create the host-only adapter

Vagrantでのhost-only adapterのエラーを回避する方法 on Windows10 - OSSを触りながらつぶやく日記

Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter

VirtualBoxでHost-Only Ethernet Adapterが原因でVMが起動しない時 | ぅゎょぅι゛ょっょぃ

ssh
docker-machine ssh default


ホストの作成からやり直す
"Docker Quickstart Terminal" ショートカットを使った場合、既にホストが存在すれば作成をスキップします。
なので、設定とか変えてもう一度ホストを作成しなおしたい場合は、
docker-machine rm default
としてからショートカットを起動します。


コンテナの一括削除
docker rm `docker ps -a -q`

不要になったイメージ・コンテナの削除
docker image prune
docker container prune
docker system prune


server misbehaving.
$ docker run hello-world
time="2017-02-24T10:07:02+09:00" level=info msg="Unable to use system certificate pool: crypto/x509: system root pool is not available on Windows"
Unable to find image 'hello-world:latest' locally
C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 10.0.2.3:53: server misbehaving.
See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.

/etc/resolv.conf に nameserver 8.8.8.8 を追加する

$ docker run hello-world
time="2017-02-24T10:18:53+09:00" level=info msg="Unable to use system certificate pool: crypto/x509: system root pool is not available on Windows"
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/


Error response from daemon: Get https://registry-1.docker.io/v2/: Method Not Allowed
いろいろやってるうちに、こんなエラーがでるようになった。
素の host を作り直したら、server misbehaving. も含めてなぜか解決した…
解決した理由がよくわからない…

No space left on device
boo2docker だと、tmpfs がメモリにマウントされるらしいので virtualbox のメインメモリを増やしてあげます。
docker-machine create に --virtualbox-memory オプションを指定すればいいみたいです。
ショートカットから start.sh を実行している場合は、一度 default を削除して、start.sh の create コマンドを実行しているところに、--virtualbox-memory を指定します。
もしくは、default を stop して VirtualBox マネージャーから設定を変更すれば OK です。

TMP じゃなくて普通にディスクサイズが足らない場合は、--virtualbox-disk-size オプションを指定するか、同様にマネージャーで容量増やしてください。
※ start.sh で docker-machine create -d virtualbox default してるだけなので、一度削除してから --virtualbox-disk-size つけるのが楽そうでした。


docker run -v > Error response from daemon: invalid bind mount spec
ホストディレクトのパスは絶対パスなので、c:\ とか書くと上記エラーになる。
Windows のパス形式 (c:\hoge) だとダメなので、/c/hoge のように書く必要があります。

PowerShell (Windows) で Docker コンテナにホストディレクトリをデータボリュームとしてマウントする際に pwd 相当のことをしたい - ひだまりソケットは壊れない

※ docker cp のときは Windows 形式

ホストとコンテナ間でのファイルコピー

docker cp from to

コンテナのパスは コンテナ名:パス のように書く。
e.g.
docker cp aa237:/path/to/dir hoge

コンテナ名は docker ps で確認できる。
ハッシュにしたくない場合は、run するときに --name オプションを付けると良い。

docker run 時に環境変数を設定する
dockerのコンテナ実行時にLANGなどの環境変数を設定する方法 - Qiita
docker run -e HOGE=hoge

ストレージの保存場所を変更する
MACHINE_STORAGE_PATH 環境変数にパスを設定すれば OK

Looks like something went wrong... Looking for vboxmanage.exe
VBOX_MSI_INSTALL_PATH 環境変数がなくなってないか確認する。(VirtualBox を更新すると消える?)



SVN: can't convert string from 'utf-8' to native encoding
Docker ではなく svn co したときのエラーですが、日本語ファイル名が含まれていると発生します。

以下を Dockerfile に追記して対応しました。
参考:「オデの日記@WEB系: svnでどんなに頑張っても"can't convert string from 'utf-8' to native encoding"エラーが治らない

RUN localedef -f UTF-8 -i ja_JP ja_JP.utf8
ENV LC_CTYPE ja_JP.utf8


最後に
一応これで docker を使い始めることができるようになりました。
が、Dockerfile 書きながらイメージを作っていくと、あれが足りなかった、あれが間違っていたと、何回もやり直しして想像以上に構築に時間がかかってしまっています。
なにかうまいやり方がある気がするのですが、知識不足が非常にネックになっている状況ですね。
どこか勉強会とかに行ったり、聞いたりするのがいいのかもな~
ということで、雑にまとめましたが、ここで書きなぐりを一旦終えます。
以上。




0 件のコメント:

コメントを投稿