2020/12/28
今回できたこと
docker buildができない理由がネットワーク設定にあるらしいことがわかった。
FreeBSDワークショップでの情報交換。
今後の作業
ネットワーク設定を調べるために、調査ツールが入った作業用のイメージを作成する。
Docker on FreeBSDをportsに取り込んでもらえる状態に持っていく。
お約束
定例作業
Docker on FreeBSDのフォローアップ
原稿公表時点では、ubuntu Dockerコンテナイメージに対して、runやexecでシェルが動作するところまでは確認できていた。
docker psでは、動作が確認できる。
code:shell
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bb33e7e062c httpd "bash" 6 minutes ago Up 6 minutes 0.0.0.0:49154->80/tcp lonely_bell
docker buildに関しては、以下のようにエラーになる。
code:Dockerfile
FROM ubuntu
MAINTAINER Takeshi MUTOH <takeshi.mutoh@gmail.com>
ENV container docker
RUN apt update -y
# RUN yum update -y && yum clean all
RUN apt install -y httpd
# RUN yum install -y httpd && yum clean all
RUN echo "Hello Apache." > /var/www/html/test.html
EXPOSE 80
code:shell
$ docker build -t test .
Sending build context to Docker daemon 557.1 kB
Error response from daemon: Untar re-exec error: exit status 1: output: unexpected EOF
サーバ側のエラーを確認するため、以下のように手動で起動する。
どうも、ネットワークの設定で、aptが情報を取得しようとした時に、サーバに接続できていないことが問題だと思われる。
code:shell
$ sudo service docker stop
Stopping docker...
$ sudo /usr/local/bin/docker -d -e jail -s zfs -g /docker -D
(snip)
DEBU0072 Calling POST /build INFO0072 POST /v1.19/build?cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&memory=0&memswap=0&rm=1&t=test%3Atest ERRO0072 Handler for POST /build returned error: Untar re-exec error: exit status 1: output: unexpected EOF ERRO0072 HTTP Error err=Untar re-exec error: exit status 1: output: unexpected EOF statusCode=500 sysutils/docker-freebsd/pkg-messageを確認すると、以下のようにパケットフィルターpfを使ってNATを動かす必要があるらしい。
code:sysutils/docker-freebsd/pkg-message
Docker requires a bit of setup before usage.
You will need to create a ZFS dataset on /usr/docker
# zfs create -o mountpoint=/usr/docker <zroot>/docker
And lastly enable the docker daemon
# sysrc -f /etc/rc.conf docker_enable="YES"
# service docker start
(WARNING)
Starting the docker service will also add the following PF rule:
nat on ${iface} from 172.17.0.0/16 to any -> (${iface})
Where $iface is the default NIC on the system, or the value
of $docker_nat_iface. This is for network connectivity to docker
containers in this early port. This should not be needed in future
versions of docker.
そこで、pfの実験的な設定を行う。
とりあえず、pfとしては、全てのパケットを通すように設定した。
code:/etc/pf.conf
pass in all
Dockerとネットワークの設定は、以下のようになる。
code:/etc/rc.conf
# Docker
docker_enable="YES"
docker_dir=/docker
docker_nat_iface=em0
# pf for docker
pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
gateway_enable="YES"
この状態でも、うまくbuildできない状態である。
とりあえず、コンテナイメージ内で、ネットワーク設定がどうなっているのか確認する必要がある。
Docker on FreeBSDの問題点や疑問点
現在の問題点は以下の通り。
公開されているDockerコンテナイメージで、トラブルシュートに必要なps, ifconfig, netstat, ping, ...などなどのコマンドが入っているものがよくわからない。
ネットワークが正しく設定されているかを知りたいため、ネットワーク系のコマンドはぜひ欲しい。
そもそも、Dockerfile使ってMyイメージ作るためには、aptなんかでコマンド入れるので、ネットワーク設定ができていることが大前提。
よそで作って、自分のdockerhubアカウントにあげて、持ってくる?
pfでパケット全通しの設定は、pass in allだけでOK?
なぜ、公式centosイメージは、そもそもpull時点で失敗しているの?
FreeBSD workshopでのご意見
デバッグ作業用Dockerコンテナイメージについて。
やっぱり、別のところで作業環境が入ったものを作ったらいいでしょ。
ports化の作業について。
タグはそれなりにこまめにうたれているので、これを作業ベースとする。
リリースtar ballも用意されているのでこれを利用する。
なんなら、git cloneして自分のところでバージョンを固定する。
成果は、早めに入れたほうがいいね。