kstm-su / ictsc_2020_kstm

0 stars 0 forks source link

コンテナに繋がらない #2

Closed Noiri closed 3 years ago

Noiri commented 3 years ago

問題名 コンテナに繋がらない 概要 大学2年生になり、人生で初めてエンジニアとしてアルバイトをICTSC社で始めたAくんは、上司から勉強を兼ねてDockerのNginxコンテナを使ってWEBサイトを公開して欲しいと依頼された。しかし、コンテナを立てても全く繋がらない。このコンテナに接続できない原因が何であるか調査し、Webサイトが表示されるよう修正せよ。

前提条件 初期状態で配置されているコンテナを作り直して回答しない 初期状態 curl 127.0.0.1:8080をVM上で実行するとcurl: (7) Failed to connect to 127.0.0.1 port 8080: Connection refusedと返ってくる。 終了状態 なぜ繋がらないか原因を特定し、報告している。

curl 127.0.0.1:8080をVM上で実行すると

Welcome to ICTSC2020!

Welcome to ICTSC2020!

が表示される。

kitakou0313 commented 3 years ago
user@vm:~$ curl 127.0.0.1:8080
curl: (7) Failed to connect to 127.0.0.1 port 8080: Connection refused
user@vm:~$

確かにつながらない

kitakou0313 commented 3 years ago
user@vm:~$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS        PORTS     NAMES
78406f6bf4be   nginx     "/docker-entrypoint.…"   7 weeks ago   Up 14 hours             nginx
user@vm:~$
kitakou0313 commented 3 years ago
user@vm:~$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS        PORTS     NAMES
78406f6bf4be   nginx     "/docker-entrypoint.…"   7 weeks ago   Up 14 hours             nginx
user@vm:~$ docker inspect 7
[
    {
        "Id": "78406f6bf4be04c8a8a6c795619c030f2a30f687896c7b857d4a05d18b4aeff3",
        "Created": "2021-01-11T07:01:42.493968728Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 1210,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-03-05T11:26:44.294071049Z",
            "FinishedAt": "2021-03-05T20:26:36.452514739+09:00"
        },
        "Image": "sha256:ae2feff98a0cc5095d97c6c283dcd33090770c76d63877caa99aefbbe4343bdd",
        "ResolvConfPath": "/var/lib/docker/containers/78406f6bf4be04c8a8a6c795619c030f2a30f687896c7b857d4a05d18b4aeff3/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/78406f6bf4be04c8a8a6c795619c030f2a30f687896c7b857d4a05d18b4aeff3/hostname",
        "HostsPath": "/var/lib/docker/containers/78406f6bf4be04c8a8a6c795619c030f2a30f687896c7b857d4a05d18b4aeff3/hosts",
        "LogPath": "/var/lib/docker/containers/78406f6bf4be04c8a8a6c795619c030f2a30f687896c7b857d4a05d18b4aeff3/78406f6bf4be04c8a8a6c795619c030f2a30f687896c7b857d4a05d18b4aeff3-json.log",
        "Name": "/nginx",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "none",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "8080"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "always",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/326fc3d68d05be657431f4b01c62105224acfdb269e3c53b3c27f709ea639a6a-init/diff:/var/lib/docker/overlay2/1c89103e9fc8a3c7181bdbb44d6fe8e367d52b25159160d2179e90c89e2fd2d7/diff:/var/lib/docker/overlay2/d5028945e94c36f5d71d977db55ac4a913c773e3e329f3c879c0b5f4e4ed923d/diff:/var/lib/docker/overlay2/724183fda4c988c66a14a4bb991ba406e6ecc99f705d05d6fa3a6bc981c68f9d/diff:/var/lib/docker/overlay2/834bb3955e4c921de743408917497801900f2a47ae5280936632fec18d957fc4/diff:/var/lib/docker/overlay2/117c5ef153c19d438c28a96790488b744dbbf60aa60b73cb5471a65f336c333f/diff",
                "MergedDir": "/var/lib/docker/overlay2/326fc3d68d05be657431f4b01c62105224acfdb269e3c53b3c27f709ea639a6a/merged",
                "UpperDir": "/var/lib/docker/overlay2/326fc3d68d05be657431f4b01c62105224acfdb269e3c53b3c27f709ea639a6a/diff",
                "WorkDir": "/var/lib/docker/overlay2/326fc3d68d05be657431f4b01c62105224acfdb269e3c53b3c27f709ea639a6a/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "78406f6bf4be",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.19.6",
                "NJS_VERSION=0.5.0",
                "PKG_RELEASE=1~buster"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "nginx",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "9387183e95e02e3f6e4b1a83bd6e376b94c80b706a7e89b6394b3d699a5bf978",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/9387183e95e0",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "none": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "40c3b553b46a8f5ca20e601e053e18b494d3b1f6ea4a86557cedb7c588db2f83",
                    "EndpointID": "cdb6149d069daaf1f7d559b96c7881727c82f052478725d8d9f527778181b67c",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": null
                }
            }
        }
    }
]
user@vm:~$

ポートフォワーディングは設定してありそう 8080→80

kitakou0313 commented 3 years ago
user@vm:~$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 12722 packets, 8186K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DOCKER-USER  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 DOCKER-ISOLATION-STAGE-1  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 11838 packets, 704K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain DOCKER (1 references)
 pkts bytes target     prot opt in     out     source               destination

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DOCKER-ISOLATION-STAGE-2  all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      docker0  0.0.0.0/0            0.0.0.0/0
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain DOCKER-USER (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0
user@vm:~$
kitakou0313 commented 3 years ago

pingは通る

user@vm:~$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.090 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.116 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.111 ms
^C
--- 127.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3070ms
rtt min/avg/max/mdev = 0.089/0.101/0.116/0.015 ms
kitakou0313 commented 3 years ago

https://blog.tiqwab.com/2018/02/12/learniing-iptables.html

kitakou0313 commented 3 years ago

docker inspect hogehogeのnetworkの設定が空なのが気になる

kitakou0313 commented 3 years ago
user@vm:~$ docker network inspect 4
[
    {
        "Name": "none",
        "Id": "40c3b553b46a8f5ca20e601e053e18b494d3b1f6ea4a86557cedb7c588db2f83",
        "Created": "2021-01-11T16:01:17.709613282+09:00",
        "Scope": "local",
        "Driver": "null",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "78406f6bf4be04c8a8a6c795619c030f2a30f687896c7b857d4a05d18b4aeff3": {
                "Name": "nginx",
                "EndpointID": "cdb6149d069daaf1f7d559b96c7881727c82f052478725d8d9f527778181b67c",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

noneネットワークとやらにいるみたい これIP振られてないやんけ!

kitakou0313 commented 3 years ago

https://qiita.com/TsutomuNakamura/items/ed046ee21caca4a2ffd9

none ネットワークについて
Docker_Network0001.png

none ネットワークはnull なネットワークドライバの実装です。
ネットワーク接続を必要としないコンテナを作成する場合に使用されます。
none ネットワークを使用したbusy box コンテナを起動し、コンテナにログインしてネットワークを見てみましょう。

ほかのネットワークに移してあげれば多分つながるね

kitakou0313 commented 3 years ago

原因 noneネットワークに登録されている

解決策 ほかのネットワークに移動させる

今回はいったん切断→bridgeに接続

user@vm:~$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
6626ab450b6c   bridge    bridge    local
f08f26a27c77   host      host      local
40c3b553b46a   none      null      local
user@vm:~$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS        PORTS     NAMES
78406f6bf4be   nginx     "/docker-entrypoint.…"   7 weeks ago   Up 15 hours             nginx
user@vm:~$ docker network disconnect none 78406f6bf4be04c8a8a6c795619c030f2a30f687896c7b857d4a05d18b4aeff3

user@vm:~$ docker network connect bridge 78
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "9387183e95e02e3f6e4b1a83bd6e376b94c80b706a7e89b6394b3d699a5bf978",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "8080"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/9387183e95e0",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "99db5a27069c94f446f35fe628ebe74a1aa203cb026c1d5a5022a5688afca51d",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [],
                    "NetworkID": "6626ab450b6c11c375f252af836a0352d2bdce6d1e5477b33f9865df52f9a4cd",
                    "EndpointID": "99db5a27069c94f446f35fe628ebe74a1aa203cb026c1d5a5022a5688afca51d",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": {}
                }
            }
        }
    }
]
kitakou0313 commented 3 years ago
user@vm:~$ curl 127.0.0.1:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to ICTSC2020!</title>
</head>
<body>
<h1>Welcome to ICTSC2020!</h1>
</body>
</html>
user@vm:~$

Done

kitakou0313 commented 3 years ago

回答

お世話になっております。

チームkstmの北沢です。

今回の問題につきましては、作成されたコンテナがnoneネットワークに接続されていたことが原因と考えられます。

このネットワークでは所属するコンテナにipアドレスが割り当てられず、外部接続用のネットワークインターフェースも作成されないため、コンテナは外部から接続できない状態となります。

解決策としては、コンテナを他ネットワークに接続させることが考えられます。 今回はnoneネットワークから切断し、bridgeネットワークに接続することで解消いたしました。

user@vm:~$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
6626ab450b6c   bridge    bridge    local
f08f26a27c77   host      host      local
40c3b553b46a   none      null      local
user@vm:~$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS        PORTS     NAMES
78406f6bf4be   nginx     "/docker-entrypoint.…"   7 weeks ago   Up 15 hours             nginx
user@vm:~$ docker network disconnect none 78406f6bf4be04c8a8a6c795619c030f2a30f687896c7b857d4a05d18b4aeff3
user@vm:~$ docker network connect bridge 78

user@vm:~$ curl 127.0.0.1:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to ICTSC2020!</title>
</head>
<body>
<h1>Welcome to ICTSC2020!</h1>
</body>
</html>
user@vm:~$

以上、お手数をおかけしますが、ご確認をお願い致します。