0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dockerに疎通確認【Ubuntu】

Posted at

こんにちは。今回はDockerの起動とapacheによる疎通確認を行なったあと、外部からのアクセスを受け付けられるようにしてみようと思います。
前回はDocker環境の構築まで行いました。今回は前回からの続きです。

環境

項目 内容
ホストOS ubuntu 24.03 LTS
デバイス RaspberryPi 4B

Dockerの起動

今回はubuntuコンテナを動かしていきます。

# run    : コンテナを新規作成
# -it    : コンソールに結果を出力 -> コンソール開くよ
# --name : 指定した名前で作成
$ sudo docker run -it --name "docker-01" ubuntu bash

Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
7bdf644cff2e: Pull complete 
Digest: sha256:728785b59223d755e3e5c5af178fab1be7031f3522c5ccd7a0b32b80d8248123
Status: Downloaded newer image for ubuntu:latest

root:/#

疎通確認

ipアドレスの確認

【前編】で解説した通り、デフォルトの設定ではbridgeモードになっているので、現在どのようなipを持っているのか調べていきます。

$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
9583f853b92c   ubuntu    "bash"    4 minutes ago   Up 4 minutes             docker-01

# sudo docker inspect [container ID] : 詳細を確認
$ sudo docker inspect 9583f853b92c | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

172.17.0.2を持っているようですね。

パッケージのインストール

今回使用しているosは最小限の機能しか持ってないので、必要なパッケージをインストールしていきます。

root:/# apt update

# ネットワーク系
root:/# apt install -y iproute2 iputils-ping net-tools

# 個人的
root:/# apt install -y nano
パッケージ名 使えるようになるコマンド 目的
iproute2 ip, tc, devlink, etc. ip a
iputils-ping ping, ping6 ping
net-tools arp, ifconfig, route, etc. なにかと便利

疎通確認

# apache を入れる
root:/# apt install -y apache2

# systemctl コマンドを使用したかったが、ないので service コマンドで代用
root@9583f853b92c:/# service apache2 status
 * apache2 is not running

root:/# service apache2 start
 * Starting Apache httpd web server apache2 *

root:/# service apache2 status
 * apache2 is running

# index.html を書き換える
root:/# echo "HelloWorld!" > /var/www/html/index.html

現在こうなっていると思います。
k8s-Docker_brig_crrentimg.png
ホストデバイス側からcurlでページが見れるか試しましょう。

$ curl http://172.17.0.2
HelloWorld!

大丈夫そうですね。

serviceコマンドざっくりチートシート

serviceコマンドのアクション一覧
アクション 説明
status サービスの状態を表示する
--status-all 利用可能なサービスの状態を一覧表示する
start サービスを起動する
stop サービスを停止する
restart サービスを再起動する
reload 設定ファイルを再読み込み(再起動なし)
force-reload 強制的にreloadする
try-restart 実行中なら再起動、止まっているなら何もしない

外から直接叩けるようにする

次はホストデバイスの外から叩けるようにしたいです。

現在のイメージ

[ホスト]
 ├── eth0 : 192.168.1.10
 └── docker0 : 172.17.0.1(仮想ブリッジ)
     └── [コンテナ] : 172.17.0.2

k8s-Docker_brig_crrentimg.png

結果のイメージ

[ホスト]
 ├── eth0 : 192.168.1.10
 └── [コンテナ] : 192.168.2.10

k8s-Docker_main.png
こんな感じにしたい。

着手

まずはコンテナを止める。

$ sudo docker ps
# 現在動いているコンテナのIDを入れる
$ sudo docker stop "CONTAINER ID"

ホストデバイスに二本目のケーブルを挿したらip aコマンドで確認する。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP>
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 192.168.10.10/24 brd 192.168.10.255 scope global eth0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 192.168.1.34/24 metric 600 brd 192.168.1.255 scope global dynamic wlan0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP>
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
7: enx207bd221e7a4: <BROADCAST,MULTICAST>
    link/ether 20:7b:d2:21:e7:a4 brd ff:ff:ff:ff:ff:ff

7:が新たに増やした物理的なインターフェースの名前。
次に仮想的なネットワークを作っていく。パラメータparentにこの名前を入れる。ここではinf0というネットワークを作成する。

$ sudo docker network create -d macvlan --subnet=192.168.10.0/24 -o parent=enx207bd221e7a4 inf0

設定ができたら確認してみる

$ sudo docker network inspect inf0
[
    {
        "Name": "inf0",
        "Id": "bb48283f93c66c3ee3e77886f328be1cad58799b197b9e71021fae6d87890d26",
        "Created": "2025-10-06T11:50:04.083554265Z",
        "Scope": "local",
        "Driver": "macvlan",
        "EnableIPv4": true,
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.10.0/24"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "parent": "enx207bd221e7a4"
        },
        "Labels": {}
    }
]

ここからネットワークとコンテナを繋げていく。

# 紐付け
$ sudo docker network connect --ip 192.168.10.20 inf0 docker-01

$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED        STATUS                        PORTS     NAMES
9583f853b92c   ubuntu    "bash"    12 hours ago   Exited (137) 21 minutes ago             docker-01
# status より docker が止まっていることを確認

$ sudo docker start 9583f853b92c
$ sudo docker attach 9583f853b92c

# 反映されたか確認
root:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP>
2: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
9: eth1@if7: <NO-CARRIER,BROADCAST,MULTICAST,UP>
    inet 192.168.10.20/24 brd 192.168.10.255 scope global eth1

確認完了。別のデバイスから確認する。

$ curl http://192.168.10.20
HelloWorld!

ドツボにハマった話

(apacheを別デバイスで確認しようとしていたがうまくいかなかったとき)

あぁ権限を与えるためにコピーして再度作り直す必要が出てきた。
(とこの時は思っていたがそれは大きな間違いだった)

# まずはコピー
$ sudo docker commit 9583f853b92c myapache:withdata

# 権限をつけて新規作成&起動
$ sudo docker run -it --privileged --name "docker-02" myapache:withdata bash

# ネットワークの紐付け
$ sudo docker network connect --ip 192.168.10.30 inf0 docker-02

うまくいかない。現状確認

root:/# ip a

2: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
19: eth1@if10: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default 
    inet 192.168.10.30/24 brd 192.168.10.255 scope global eth1

stateLOWERLAYERDOWNになっている。
ホストデバイス側も確認

$ ip link show enx207bd221e7a4
10: enx207bd221e7a4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 20:7b:d2:21:e7:a4 brd ff:ff:ff:ff:ff:ff

stateDOWNになっている。これは物理的に落ちているので起動させてあげる。

$ sudo ip link set enx207bd221e7a4 up
$ ip link show enx207bd221e7a4
10: enx207bd221e7a4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 20:7b:d2:21:e7:a4 brd ff:ff:ff:ff:ff:ff

stateUPになったことがわかる。
(物理層が落ちていたのでいくらやっても疎通が通らないのである。)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?