Мне нужно иметь возможность 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 находится как раз между самими контейнерами, по крайней мере, на данный момент.