Docker-контейнер предоставляет статический IP-адрес

Я пытаюсь привязать нужный IP-адрес и порт к контейнеру докеров и открыть его в сети, чтобы к нему можно было получить доступ через другие машины в сети, независимо от того, на какой машине он работает. Я очень новичок в докере. Я могу добиться привязки порта к локальному хосту, но таким образом он становится зависимым от машины, т.е. нам нужно получить доступ к контейнеру через IP-адрес этой машины. Мои тесты выполняются в двух разных сетях, поэтому я хочу сделать их независимыми от машин. Итак, что я пытаюсь сделать, это: привязать контейнер к любому случайному желаемому IP-адресу (не уверен, что это может быть достигнуто, поскольку IP-адрес всегда должен быть уникальным в сети). Пожалуйста, дайте мне знать, достижимо ли это, и если да, то как. Заранее большое спасибо.


person Prabhat    schedule 24.07.2017    source источник
comment
Как выглядит ваше docker runstatement?   -  person Thomas Stets    schedule 24.07.2017
comment
docker run -p ‹IP›::‹port› ‹image›   -  person Prabhat    schedule 24.07.2017
comment
На самом деле я хочу добиться этого с помощью Spotiy docker ciient. но с помощью командной строки я тоже не умею. Похоже, что-то нужно делать с сетью.   -  person Prabhat    schedule 24.07.2017
comment
docker run -d -p 192.168.99.100::15672 761ae3adcd1a 5497f9102c85b01b39292478552a5821c955da84073d724330bf89bdba875858 docker: Error response from daemon: driver failed programming external connectivity on endpoint hardcore_jang (21296461920cea98e0808407a3755542687f1be53591b7231b918071ac6b7d97): Error starting userland proxy: listen tcp 192.168.99.100:32777: bind: cannot assign запрашиваемый адрес.   -  person Prabhat    schedule 24.07.2017
comment
@Prabhat Отредактируйте свой вопрос вместо того, чтобы заполнять раздел комментариев инструкциями.   -  person Grimmy    schedule 24.07.2017


Ответы (2)


Чтобы подключить ваш контейнер к другому контейнеру, вы можете использовать сети докеров. Здесь приведен подробный ответ, который поможет вам настроить сеть и подключить контейнеры. И да, это не зависит от машины, если вы используете сети докеров.

person Ayushya    schedule 25.07.2017

Вы можете попробовать следующие 2 способа решения.

  1. Создайте сеть и запустите свой контейнер в этой сети.

    создание сети докеров --subnet=193.168.3.0/24 network_name

    docker run --net network_name -p 193.168.3.18:15672 изображение

  2. Создайте файл yml «docker-compose.yml» и добавьте в него следующее:

version: "2"
services:
  containername:
    image: your-image-name:version
    restart: always
    expose:
      - "8080"
    networks:
      overlay:
        ipv4_address: 193.168.3.18
    ports:
      - 8080:8080
networks:
  overlay:
    driver: bridge
    ipam:
      config:
        - subnet: 193.168.3.0/24

Сохраните файл и выполните приведенную ниже команду

docker-compose -f docker-compose.yml up -d

Вы можете использовать версию 3, если хотите использовать рой. После запуска вышеуказанной команды создается контейнер с именем «dir-name-of-yml_containername_1». Здесь вы создаете сеть с подсетью «193.168.3.0/24» и используете IP-адрес «193.168.3.18» для создания контейнера.

person Altafhusen    schedule 24.07.2017
comment
Большое спасибо .. Я попробовал вариант 1. Docker Network Create -Subnet = 193.168.3.0/24 Rabbit_network 90D730BC864A3871FC0353D6EF6C37AC738B6B1A8174E67CDB037B3A21F8862 DOCKER RUN -NET RABBIT_PLORIPLORIPLORIPLORIPLORIPLORIPLORIPLORIPLERIPLERIPLORIPLERIPLERIPLERIPLORIPLORIPLORIPLORIPLORIPLORIPLORIPLORIPLORIPLORIPLORIPLORIPLORIPLORIPLORIPLORIP. . См. 'docker run --help'. - person Prabhat; 26.07.2017
comment
Then I tried this way : docker run --net rabbit_network -p 193.168.3.18::15672 rabbitmq-st docker: Error response from daemon: driver failed programming external connectivity on endpoint goofy_shannon (242d4783980fdc7dd06630474c56de710d4009d4c30964cb683987e0e698945d): Error starting userland proxy: listen tcp 193.168 .3.18:32777: привязка: невозможно назначить запрошенный адрес. Ошибка ERRO[0002] при ожидании контейнера: контекст отменен - person Prabhat; 26.07.2017
comment
Вы пробовали решение 2? Вам нужно удалить сеть, созданную в решении 1, прежде чем пытаться решить 2. docker network remove rabbit_network - person Altafhusen; 26.07.2017