docker контейнер не может видеть данные из общего тома - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь создать лабораторию, используя docker контейнеров с базовым образом centos7 и docker -compose. Вот мой файл docker -compose.yaml

version: "3"
services:
  base:
    image: centos_base
    build:
      context: base
  master:
    links:
      - base
    build:
      context: master
    image: centos_master
    container_name: master01
    hostname: master01
    volumes:
      - ansible_vol:/var/ans
    networks:
      - net
  host01:
    links:
      - base
      - master
    build: 
      context: host
    image: centos_host
    container_name: host01
    hostname: host01
    command: ["/var/run.sh"]
    volumes:
     - ansible_vol:/var/ans
    networks:
      - net
networks:
  net:
volumes:
  ansible_vol:

Мои Docker файлы, как показано ниже

Базовое изображение docker файл:

# For centos7.0
FROM centos:7
RUN yum install -y net-tools man vim initscripts openssh-server
RUN echo "12345" | passwd root --stdin
RUN mkdir /root/.ssh

Главный Dockerfile:

FROM centos_base:latest
# install ansible package
RUN yum install -y epel-release
RUN yum install -y ansible openssh-clients

RUN mkdir /var/ans
# change working directory
WORKDIR /var/ans

RUN ssh-keygen -t rsa -N 12345 -C "master key" -f master_key

CMD /usr/sbin/sshd -D

Dockerfile образа хоста:

FROM centos_base:latest
RUN mkdir /var/ans
COPY run.sh /var/
RUN chmod 755 /var/run.sh

My run. sh file:

#!/bin/bash
cat /var/ans/master_key.pub >> /root/.ssh/authorized_keys
# start SSH server
/usr/sbin/sshd -D

Мои проблемы:

  1. Если я запускаю docker -compose up -d --build, я не вижу никаких контейнеров. все они создаются, но закрываются.
Successfully tagged centos_host:latest
Creating working_base_1 ... done
Creating master01       ... done
Creating host01         ... done

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
433baf2dd0d8        centos_host         "/var/run.sh"            12 minutes ago      Exited (1) 12 minutes ago                       host01
a2a57e480635        centos_master       "/bin/sh -c '/usr/sb…"   13 minutes ago      Exited (1) 12 minutes ago                       master01
a4acf6fb3e7b        centos_base         "/bin/bash"              13 minutes ago      Exited (0) 13 minutes ago                       working_base_1

s sh ключи, сгенерированные в образе 'centos_master', недоступны в контейнере centos_host, хотя я добавил отображение томов 'ansible_vol: / var / ans' в файл docker -compose Мое намерение - это s sh ключевые файлы, созданные в master, должны быть доступны в контейнерах хоста, поэтому сценарий run. sh может копировать их в раздел authorized_keys контейнеров хоста.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Попробуйте ввести base / Dockerfile:

RUN echo "12345" | passwd root --stdin; \
    ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -b 4096 -t rsa

и перезапустить docker-compose build

/ etc / ssh / ssh_host_rsa_key - это ключ, используемый sshd (ssh daemon), поэтому эти контейнеры могут быть запущены должным образом.

Ключ, который вы сгенерировали и скопировали в authorized_keys, будет использоваться, чтобы позволить ssh client подключаться к контейнеру через s sh.

0 голосов
/ 01 августа 2020

Попробуйте использовать external: false, чтобы не пытаться контейнер создать его и переопределить предыдущие данные при создании

version: "3"
services:
  base:
    image: centos_base
    build:
      context: base
  master:
    links:
      - base
    build:
      context: master
    image: centos_master
    container_name: master01
    hostname: master01
    volumes:
      - ansible_vol:/var/ans
    networks:
      - net
  host01:
    links:
      - base
      - master
    build: 
      context: host
    image: centos_host
    container_name: host01
    hostname: host01
    command: ["/var/run.sh"]
    volumes:
     - ansible_vol:/var/ans
    networks:
      - net
networks:
  net:
volumes:
  ansible_vol:
    external: false
...