SSH между докерами - PullRequest
       46

SSH между докерами

0 голосов
/ 25 сентября 2019

Мне нужно иметь возможность ssh из одного док-контейнера в другой док-контейнер.Я настроил мостовую сеть, в которой живут контейнеры, но я могу заставить ssh работать только с одним контейнером за раз.Мой файл docker-compose.yml:

version: "3.5"

services:
  centos_7_systemd:
    image: local/centos-7-systemd:0.1
    build:
      context: ./centos-7-systemd-base-image
    command: /usr/sbin/init

  base_img:
    image: local/base-img:0.1
    build:
      context: ./pre-base-image
    command: /usr/sbin/init

  pre_ansible:
    hostname: pre-ansible
    image: local/base-img:0.1
    volumes:
      - ..:/var/devops
      - /sys/fs/cgroup:/sys/fs/cgroup:ro
    tmpfs:
      - /run
      - /tmp
    command: /usr/sbin/init
    networks:
      pre_net:
        aliases:
            - pre-ansible.4tug.local

  pre_portal:
    hostname: pre-portal
    image: local/base-img:0.1
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:ro
    tmpfs:
      - /run
      - /tmp
    command: /usr/sbin/init
    networks:
      pre_net:
        aliases:
            - pre-portal.4tug.local

networks:
  pre_net:
    driver: bridge

, а мой Dockerfile для centos-7-systemd соответствует указаниям на хаб-странице здесь .

FROM centos:7.6.1810

ENV container docker
RUN yum -y update
RUN yum clean all
RUN yum -y upgrade
RUN yum -y install systemd
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
  systemd-tmpfiles-setup.service ] || rm -f $i; done); \
  rm -f /lib/systemd/system/multi-user.target.wants/*;\
  rm -f /etc/systemd/system/*.wants/*;\
  rm -f /lib/systemd/system/local-fs.target.wants/*; \
  rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
  rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
  rm -f /lib/systemd/system/basic.target.wants/*;\
  rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]

И мой базовый образ Dockerfile

FROM docker-ric.di2e.net/centos-7-systemd

RUN yum -y install openssh
RUN yum -y install openssh-clients
RUN yum -y install iproute
RUN yum -y install iptables
RUN yum -y install sudo
RUN yum install -y curl which initscripts net-tools bind-utils openssh-server

RUN systemctl enable sshd
EXPOSE 22

RUN adduser ansible
RUN echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
RUN su - ansible -c "yes y | ssh-keygen -q -t rsa -N '' -f /home/ansible/.ssh/id_rsa > /dev/null"

Что я замечаю, так это то, что если я увеличу объем только одного контейнера с помощью volumes: /sys/fs/cgroup:/sys/fs/cgroup:ro, тогда я могу открыть порт 22 для этого конкретного содержимого и ввести ssh в себя.Однако, когда я пытаюсь использовать это сопоставление томов только для чтения во всех других контейнерах, я получаю это предупреждение (и ssh не работает вообще):

ПРЕДУПРЕЖДЕНИЕ: Служба "pre_ansible"используя том "/ sys / fs / cgroup" из предыдущего контейнера.Отображение хоста "/ sys / fs / cgroup" не имеет никакого эффекта.Удалите существующие контейнеры (с помощью docker-compose rm pre_ansible), чтобы использовать сопоставление томов хоста.

Таким образом, конечная цель здесь - разрешить ssh между всеми моими док-контейнерами в их собственной сети.Основываясь на документации, которую я прочитал с CentOS от Docker, мне нужно отобразить этот /sys/fs/cgroup:/sys/fs/cgroup:ro том, и когда я делаю это правильно, ssh работает, но только для одного контейнера.

Как мне получить ssh наработать для всех контейнеров в сети?

Примечание: я не хочу включать ssh между хостом и контейнерами.Ssh находится как раз между самими контейнерами, по крайней мере, на данный момент.

...