Як отримати IP-адресу контейнера Docker від хоста


1408

Чи є команда, яку я можу виконати, щоб отримати IP-адресу контейнера прямо від хоста після створення нового контейнера?

В основному, як тільки Docker створює контейнер, я хочу прокрутити власний сценарій розгортання коду та конфігурації контейнера.


28
Я просто хотів переконатися, що інші нобби не помиляються і намагаються отримати IP-адресу із зображення замість контейнера. Переконайтеся, що ви отримали CID або ідентифікатор контейнера та запит, що; CID через 'docker ps', тобто.
Пол Грегуар

Як отримати навпаки? Хост IP або дзвінок з контейнера?
Сомнат Мулук

Відповіді:


2325

На допомогу приходить --formatваріант inspect.

Сучасний синтаксис клієнта Docker:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

Старий синтаксис клієнта Docker:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

Ці команди повернуть IP-адресу контейнера Docker.

Як зазначалося в коментарях: якщо ви працюєте в Windows, використовуйте подвійні лапки "замість одинарних лапок 'навколо фігурних дужок.


34
Це набагато, набагато краще рішення. Попросіть лише те, що вам потрібно, якщо це можливо!
MikeyB

8
Хм. Отримання <no value>відповіді на Mac за допомогою Fig / Boot2Docker
cevaris

2
@cevaris Ви отримаєте, <no value>якщо спробувати запустити це проти контейнера, який не працює. Переконайтеся, що ваш контейнер працює перед цим.
TheJediCowboy

55
!УВАГА! Це більше не працює. Новий формат специфічний для контейнера і слід за формою {{ .NetworkSettings.Networks.$network.IPAddress }}. За замовчуванням здається міст, але під docker-compose це буде конкретне ім’я, яке залежить від імені вашої програми (я думаю, що - прапор-name name, але це також залежатиме від типу конфігурації мережі ви налаштували). Я написав повну відповідь у відповідь тут stackoverflow.com/questions/17157721/…
Данк

5
Можливо, я спляча вівця, але попередження про подвійні цитати не було достатньо сміливим і миготливим, щоб привернути мою увагу. Можливо, надайте два приклади, чітко позначені Linux та Windows. Я буквально просто набрав приклад, перевірив документи, які також використовують одинарні лапки, а потім помилку в Googled. Я впевнений, що я не один.
Вік

513

Можна використовувати docker inspect <container id>.

Наприклад:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID

67
Для того, щоб витягнути ip, ви можете зробити щось на кшталт docker inspect $CID | grep IPAddress | cut -d '"' -f 4, він прекрасно працює :)
скрип

9
Об’єднавши це все, цей псевдонім оболонки повинен перелічити всі ідентифікатори контейнерів та їх ips:alias dockerip='docker ps | tail -n +2 | while read cid b; do echo -n "$cid\t"; docker inspect $cid | grep IPAddress | cut -d \" -f 4; done'
ko-dos

64
Як згадував @ user3119830, є новий варіант перевірки. Тепер ви можете отримати Ip простіше за допомогоюdocker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
скрип

16
Просто записка. Параметри одиночного тире застарівають, так що -формат стане - форматом.
jamtur01

7
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}це новий синтаксис. -formatзастаріла, вона стає --format.
Devy

408

Спочатку отримайте ідентифікатор контейнера:

docker ps

(Перший стовпець призначений для ідентифікатора контейнера)

Використовуйте ідентифікатор контейнера для запуску:

docker inspect <container ID>

Унизу, у розділі "Налаштування мережі", ви можете знайти "IPAddress"

Або просто зробіть:

docker inspect <container id> | grep "IPAddress"

5
Шкода, що в одному з моїх примірників (почалося з docker run -it MYCONTAINER /bin/bash), вихід inspectне має розділу NetworkSettings!
Ерік

3
Це не працює в Windows 10. Вам також потрібно дізнатися ip адресу DockerNAT за допомогою ipconfig.
ntiedt

@Eric Ви також можете перевірити мережевий міст для цього:docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
Tomasz Kapłoński

5
Я дуже віддаю перевагу ... | grep IPрішенням усіх деталей форматування, необхідних для отримання IP-адреси. +1
d8aninja

1
@Eric - ви переплутали контейнер із зображенням . Команда є насправді docker run -it MYIMAGE(це не назва контейнера ); якщо це зробити, docker inspect MYIMAGEви отримаєте статичну інформацію про зображення . Потрібно знайти ім'я запущеного контейнера (або використовувати його id, як пропонують інші). У моїй системі перший такий контейнер, створений із цього зображення, за замовчуванням наводить ім'я MYIMAGE_1, так docker inspect MYIMAGE_1це NetworkSettings.
ToolmakerSteve

215
docker inspect CONTAINER_ID | grep "IPAddress"

Ви можете додати -igrep за ігнорування справи, тоді навіть наступне буде працювати:

docker inspect CONTAINER_ID | grep -i "IPaDDreSS"

5
чим ця відповідь краще / відрізняється від інших 22?
sds

Це, безумовно, не найкраща відповідь. Відповідь WouterD - це відповідь, яку ви шукаєте.
M.Vanderlee

7
@ M.Vanderlee ця відповідь має команду, яку легше запам’ятати, що дозволяє краще відповісти на ІМО.
huysentruitw

1
@WouterHuysentruit Звичайно, але ви отримуєте кілька записів та власне текст "IPAddress". Ви не можете використовувати його в сценарії без додаткових маніпуляцій.
M.Vanderlee

Ти правий. У контексті запитання краще відповідає інша відповідь.
huysentruitw

133

Щоб отримати всі назви контейнерів та їх IP-адреси лише в одній команді.

docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

Якщо ви використовуєте docker-composeкоманду, це буде:

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

Вихід буде:

/containerA - 172.17.0.4
/containerB - 172.17.0.3
/containerC - 172.17.0.2

5
Мені це дуже подобається, але це не працює і для Docker Compose. Щось стосується того, щоб мати власну мережу. Замість цього змініть {{.NetworkSettings.IPAddress }}на{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
clockworkgeek

Ось використання варіації I: docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'. В sed(1)видаляє порожні рядки для контейнерів присутній, але не мають IP-адресу.
NYCeyes

97

Додайте цей скрипт оболонки у ~/.bashrcвідповідний файл:

docker-ip() {
  docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}

Потім, щоб отримати IP-адресу контейнера, просто зробіть це:

docker-ip YOUR_CONTAINER_ID

Для нової версії Docker, будь ласка, використовуйте наступну:

docker-ip() {
        docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}

5
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
saiyancoder

це працює для мене, але потрібноsource ~/.bash_profile
пені чан

1
Ви отримаєте цю помилку, якщо не будете перевіряти запущений контейнер, а лише зображення ... зображення не має IPAddress ... жахливе повідомлення про помилку, так
dagelf

37

Показати IP-адреси всіх контейнерів:

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

37

У Docker 1.3+ ви також можете перевірити це за допомогою:

Введіть запущений Docker (Linux):

docker exec [container-id or container-name] cat /etc/hosts
172.17.0.26 d8bc98fa4088
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.17 mysql

Для вікон:

docker exec [container-id or container-name] ipconfig

1
або простоdocker exec [container-name-or-id] ip a
Стефан Ріхтер

для windowsdocker exec [container-id or container-name] ipconfig
GreatAndPowerfulOz

27

Станом на версію 1.10.3 Докера, складіть 20f81dd

Якщо ви не сказали Docker інше, Docker завжди запускає ваші контейнери в мостовій мережі. Тож ви можете спробувати цю команду нижче:

docker network inspect bridge

Потім слід повернути розділ Containers, який відображатиме IP-адресу цього запущеного контейнера.

[
    {
        "Name": "bridge",
        "Id": "40561e7d29a08b2eb81fe7b02736f44da6c0daae54ca3486f75bfa81c83507a0",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Containers": {
            "025d191991083e21761eb5a56729f61d7c5612a520269e548d0136e084ecd32a": {
                "Name": "drunk_leavitt",
                "EndpointID": "9f6f630a1743bd9184f30b37795590f13d87299fe39c8969294c8a353a8c97b3",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        }
    }
]

що це означає, якщо розділ контейнерів порожній? Проте контейнер працює і працює.
StackEdd

24

Виконати:

docker ps -a

Тут буде показано активні зображення докера:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
3b733ae18c1c        parzee/database     "/usr/lib/postgresql/"   6 minutes ago       Up 6 minutes                 5432/tcp            serene_babbage

Використовуйте значення ідентифікатора CONTAINER:

docker inspect <CONTAINER ID> | grep -w "IPAddress" | awk '{ print $2 }' | head -n 1 | cut -d "," -f1

"172.17.0.2"


23

На підставі деяких відповідей, які мені сподобалися, я вирішив об'єднати їх у функцію, щоб отримати всі IP-адреси та інший для конкретного контейнера. Вони зараз у моєму .bashrcфайлі.

docker-ips() {
    docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
}

docker-ip() {
  docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}

Перша команда дає IP-адресу всіх контейнерів, а друга - IP-адресу конкретного контейнера.

docker-ips
docker-ip YOUR_CONTAINER_ID

16

Довідкові контейнери за назвою:

docker run ... --name pg-master

Потім візьміть IP-адресу за назвою:

MASTER_HOST=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' pg-master)

15

Я написав наступний сценарій Bash, щоб отримати таблицю IP-адрес з усіх контейнерів, що працюють під docker-compose.

function docker_container_names() {
    docker ps -a --format "{{.Names}}" | xargs
}

# Get the IP address of a particular container
dip() {
    local network
    network='YOUR-NETWORK-HERE'
    docker inspect --format "{{ .NetworkSettings.Networks.$network.IPAddress }}" "$@"
}

dipall() {
    for container_name in $(docker_container_names);
    do
        local container_ip=$(dip $container_name)
        if [[ -n "$container_ip" ]]; then
            echo $(dip $container_name) " $container_name"
        fi
    done | sort -t . -k 3,3n -k 4,4n
}

Ви повинні змінити змінну мережу на своє власне мережеве ім'я.


1
Відповідь Tuong Le звідси stackoverflow.com/questions/17157721/… уникає вказувати мережу в dip (): докер перевіряє --format '{{range .NetworkSettings.Networks}} {{. IPAddress}} {{end} } '"$ @"
JoanComasFdz

1
@JoanComasFdz ти так врятував мене!
Чагай Фрідлендер

14

Ось швидка робоча відповідь:

Отримайте ім’я або ідентифікатор контейнера:

docker container ls

Тоді отримайте IP:

docker inspect <container_ID Or container_name> |grep 'IPAddress'

Отримайте порт:

docker inspect <container_ID Or container_name> |grep 'Port'

13

Docker написаний на Go, і він використовує синтаксис Go для запитів.

Щоб перевірити IP-адресу конкретного контейнера, потрібно запустити команду ( -fдля "форматування"):

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_id_or_name

Для ідентифікатора або імені контейнера можна виконати команду

docker container ls

який перелічить кожен запущений контейнер.


1
Це дуже корисно. Де я можу знайти документацію, щоб написати власні запити Go?
Майкл Гофман

12

Ось рішення, яке я сьогодні розробив у Python, використовуючи docker inspect containerвихід JSON як джерело даних.

У мене є багато контейнерів та інфраструктури, які мені доводиться перевіряти, і мені потрібно швидко та досить швидко отримувати основну мережеву інформацію з будь-якого контейнера . Ось чому я зробив цей сценарій.

ВАЖЛИВО: З версії 1.9 Докер дозволяє створювати декілька мереж і приєднувати їх до контейнерів.

#!/usr/bin/python

import json
import subprocess
import sys

try:
    CONTAINER = sys.argv[1]
except Exception as e:
    print "\n\tSpecify the container name, please."
    print "\t\tEx.:  script.py my_container\n"
    sys.exit(1)

# Inspecting container via Subprocess
proc = subprocess.Popen(["docker","inspect",CONTAINER],
                      stdout=subprocess.PIPE,
                      stderr=subprocess.STDOUT)

out = proc.stdout.read()
json_data = json.loads(out)[0]

net_dict = {}
for network in json_data["NetworkSettings"]["Networks"].keys():
    net_dict['mac_addr']  = json_data["NetworkSettings"]["Networks"][network]["MacAddress"]
    net_dict['ipv4_addr'] = json_data["NetworkSettings"]["Networks"][network]["IPAddress"]
    net_dict['ipv4_net']  = json_data["NetworkSettings"]["Networks"][network]["IPPrefixLen"]
    net_dict['ipv4_gtw']  = json_data["NetworkSettings"]["Networks"][network]["Gateway"]
    net_dict['ipv6_addr'] = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6Address"]
    net_dict['ipv6_net']  = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6PrefixLen"]
    net_dict['ipv6_gtw']  = json_data["NetworkSettings"]["Networks"][network]["IPv6Gateway"]
    for item in net_dict:
        if net_dict[item] == "" or net_dict[item] == 0:
            net_dict[item] = "null"
    print "\n[%s]" % network
    print "\n{}{:>13} {:>14}".format(net_dict['mac_addr'],"IP/NETWORK","GATEWAY")
    print "--------------------------------------------"
    print "IPv4 settings:{:>16}/{:<5}  {}".format(net_dict['ipv4_addr'],net_dict['ipv4_net'],net_dict['ipv4_gtw'])
    print "IPv6 settings:{:>16}/{:<5}  {}".format(net_dict['ipv6_addr'],net_dict['ipv6_net'],net_dict['ipv6_gtw'])

Вихід:

$ python docker_netinfo.py debian1

[frontend]

02:42:ac:12:00:02   IP/NETWORK        GATEWAY
--------------------------------------------
IPv4 settings:      172.18.0.2/16     172.18.0.1
IPv6 settings:            null/null   null

[backend]

02:42:ac:13:00:02   IP/NETWORK        GATEWAY
--------------------------------------------
IPv4 settings:      172.19.0.2/16     172.19.0.1
IPv6 settings:            null/null   null

Будь ласка, перейдіть на сценарій python2.7, python3 зараз загальноприйнятий або напишіть дві версії
42n4

Я оновлю свою історію, і як тільки я отримаю, я опублікую тут. Дійсно, ця обгортка була розроблена для Python 2.7. Дякуємо за відгук!
ivanleoncz

9
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containername or containerID here>

Вищезазначене працює, якщо контейнер розгорнуто до мережі мостів за замовчуванням.

Однак якщо ви користуєтеся власною мостовою мережею або мережею, що накладається, я виявив, що нижче працює краще:

docker exec <containername or containerID here> /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'

9

Щоб розширити відповідь ko-dos, ось псевдонім перелічить усі назви контейнерів та їх IP-адреси:

alias docker-ips='docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect $name | grep IPAddress | cut -d \" -f 4; done'

1
Це може бути спрощено зовсім небагато - використовуйте, docker ps -qщоб уникнути tail, і --formatщоб уникнути грепу. Крім того, ви можете передавати кілька ідентифікаторів контейнерів, docker inspectа не петлю в оболонці.
Брайан

1
docker ps -qвідображає лише числові ідентифікатори контейнерів, але я думаю, що краще використовувати їх ім’я. tailлише позбутися першого рядка (заголовок таблиці) і все ще потрібно. Я міг би використовувати --format, хоча: docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect --format="{{.NetworkSettings.IPAddress}}" $name | cut -d \" -f 4; done. Але це не здається великим покращенням ... grepІМО був більш читабельним.
Марко Рой

1
Злегка змінена версія, яка спочатку перераховує IP-адреси, в одному рядку разом із назвою контейнера: docker ps | хвіст -n +2 | під час читання -aa; do name = $ {a [$ (($ {# a [@]} - 1))]}; docker перевіряє $ name | grep "IPAdress. * [0-9] \ +" | вирізати -d \ "-f 4 | tr" \ n "" "; echo -e" \ t $ {name} "; зроблено
Gilead

Закінчено:docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
antogerva

9

Я використовую цей простий спосіб

docker exec -it <container id or name> hostname -i

напр

ubuntu@myhost:~$ docker exec -it 3d618ac670fe hostname -i
10.0.1.5

7

Якщо ви встановили Docker за допомогою Docker Toolbox, ви можете використовувати додаток Kitematic, щоб отримати IP-адресу контейнера:

  1. Виберіть контейнер
  2. Натисніть Налаштування
  3. Перейдіть на вкладку Порти.

Для мене IP-адреса була на вкладці "Ім'я хоста / порти", але це все-таки була дуже корисною відповіддю! Зверніть увагу, що docker inspectце не працює, коли ви запускаєте панель інструментів docker. Він повідомить IP-адресу, але ваші служби використовуватимуть не правильну адресу.
Göran Roseen

7

Щоб отримати IP-адресу та порт хосту контейнера:

docker inspect containerId | awk '/IPAddress/ || /HostPort/'

Вихід:

    "HostPort": "4200"
                    "HostPort": "4200"
        "SecondaryIPAddresses": null,
        "IPAddress": "172.17.0.2",
                "IPAddress": "172.17.0.2",

7

ПРИМІТКА!!! для використання Docker Compose:

Оскільки Docker Compose створює ізольовану мережу для кожного кластеру, наведені нижче методи не працюють docker-compose.


Найелегантніший і найпростіший спосіб - це визначення функції оболонки, на даний момент найбільш відповідна відповідь @ WouterD :

dockip() {
  docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}

Docker може записати ідентифікатори контейнерів у файл, як-от програми Linux:

Працюючи з --cidfile=filename, Docker скидає ідентифікатор контейнера на "ім'я файлу".

Додаткову інформацію див. У розділі " Докер виконує PID-еквівалентний розділ ".

--cidfile="app.cid": Write the container ID to the file

Використання PID-файлу:

  1. Запуск контейнера з --cidfileпараметром, app.cidвміст файлу виглядає так:

    a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
    
  2. Ви можете використовувати вміст файлів для огляду контейнерів Docker:

    blog-v4 git:(develop) ✗ docker inspect `cat app.cid`
    
  3. Ви можете витягнути IP контейнера за допомогою вбудованого сценарію Python:

    $ docker inspect `cat app.cid` | python -c "import json;import sys;\
    sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])"
    172.17.0.2
    

Ось більш зручна для людини форма:

#!/usr/bin/env python
# Coding: utf-8
# Save this file like get-docker-ip.py in a folder that in $PATH
# Run it with
# $ docker inspect <CONTAINER ID> | get-docker-ip.py

import json
import sys

sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])

Див. " 10 альтернатив отримання IP-адреси контейнера Docker " для отримання додаткової інформації.



5

У цьому списку буде вказано всі IP-адреси контейнерів на хості:

sudo docker ps -aq | while read line;  do sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $line ; done

5

Docker перевіряє використання для друку всіх ips контейнерів та відповідних назв

docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'

5

Просто для повноти:

Мені дуже подобається --formatваріант, але спочатку я його не усвідомлював, тому використовував простий одношаровий Python, щоб отримати той самий результат:

docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'

Це крута відповідь. Дивіться також ще одна відповідь - stackoverflow.com/a/36306632/432903
prayagupd

5

Поєднання попередніх відповідей з пошуку ідентифікатора контейнера на основі імені зображення Docker:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' `docker ps | grep $IMAGE_NAME | sed 's/\|/ /' | awk '{print $1}'`

4

Використання:

docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1

Це фактична правильна однорядкова команда. Ось що я отримав. $ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1 172.17.0.2
Jayant Bhawal

4

Для використання контейнерів Windows

docker exec <container> ipconfig

де <container>це ім'я або ідентифікатор контейнера.

Ви можете використовувати docker psідентифікатор контейнера.


Не забудьте використати "-rm", інакше це буде повільно з'їдати простір на жорсткому диску з невирішеними шарами. Добре поєднувати “-rm” з “run” майже у всіх випадках.
Контанго

@Contango: 'docker exec' виконує команду у вже запущеному контейнері. У ньому немає перемикача --rm. docs.docker.com/engine/reference/commandline/exec
kirodge

4

Якщо ви забули ідентифікатор контейнера або не хочете маніпулювати командами оболонки, краще використовувати інтерфейс типу Portainer.

https://portainer.io/

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Там ви можете знайти всю інформацію про контейнер і IP.


4
Хоча це посилання може відповісти на запитання, лише відповіді на посилання відмовляють у програмі переповнення стека, ви можете покращити цю відповідь, взявши важливі частини посилання та ввівши її у свою відповідь. Це гарантує, що ваша відповідь все ще є відповіддю, якщо посилання буде змінено або видалено :)
WhatsThePoint
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.