Skip to main content

Установка Erachain в Docker

1. Создание Dockerfile

Создайте файл Dockerfile в любом удобном каталоге на хостовой системе:

Dockerfile

# Используем базовый образ Ubuntu 20.04
FROM ubuntu:20.04

# Обновляем список пакетов и устанавливаем Java Runtime Environment
RUN apt-get update && apt-get install -y default-jre

# Копируем каталог Cluster-v1.2.15a с хостовой системы в контейнер
COPY /home/user/Cluster-v1.2.15a /home/Cluster-v1.2.15a

# Указываем рабочую директорию
WORKDIR /home/Cluster-v1.2.15a

# Запускаем команду при старте контейнера
CMD ["java", "-jar", "lama.jar", "-pass=1", "-seed=47:drv527d68gv7e86rgv:1", "-nogui"]

2. Сборка Docker образа

Перейдите в каталог, где находится Dockerfile, и выполните команду для сборки образа:

docker build -t my-ubuntu-container .

3. Запуск контейнера

Теперь запустите контейнер с пробросом портов:

docker run -d -p 9056:9056 -p 9057:9057 -p 9058:9058 my-ubuntu-container

4. Альтернативный запуск команды вручную

Если вам нужно зайти в контейнер и запустить команду вручную, выполните следующие шаги:

Запустите контейнер без команды в Dockerfile:

docker run -it -p 9056:9056 -p 9057:9057 -p 9058:9058 my-ubuntu-container /bin/bash

После запуска контейнера вы окажетесь в его командной строке. Теперь выполните команду:

java -jar lama.jar -pass=1 -seed=47:drc541d68gv7ef6rga:1 -nogui

5. Заключение

Оба метода имеют свои плюсы. Если вы хотите, чтобы команда запускалась автоматически при старте контейнера, лучше прописать её в CMD в Dockerfile. Если вам нужно гибко управлять контейнером, то запустите его без команд и запускайте их вручную.

Теперь у вас есть полный процесс создания и запуска контейнера.

Eсли вы планируете запускать команду вручную внутри контейнера, то в Dockerfile эту строку указывать не нужно. Удалите или не добавляйте строку с CMD.

Таким образом, Dockerfile будет выглядеть так:

# Используем базовый образ Ubuntu 20.04
FROM ubuntu:20.04

# Обновляем список пакетов и устанавливаем Java Runtime Environment
RUN apt-get update && apt-get install -y default-jre

# Копируем каталог Cluster-v1.2.15a с хостовой системы в контейнер
COPY /home/user/Cluster-v1.2.15a /home/Cluster-v1.2.15a

# Указываем рабочую директорию
WORKDIR /home/Cluster-v1.2.15a

После этого, запустите контейнер командой:

docker run -it -p 9056:9056 -p 9057:9057 -p 9058:9058 my-ubuntu-container /bin/bash

Когда контейнер запустится и вы попадёте в его командную строку, вы сможете вручную выполнить команду:

java -jar lama.jar -pass=1 -seed=47:drc541d68gv7ef6rga:1 -nogui

Таким образом, у вас будет больше контроля над процессом.

Чтобы зайти в командную строку уже запущенного контейнера, используйте команду docker exec. Вот пошаговая инструкция:

    Найдите ID или имя контейнера:

    Вы можете найти ID или имя запущенного контейнера с помощью команды:

docker ps

Эта команда покажет список всех работающих контейнеров. В первой колонке будет ID контейнера, а в колонке NAMES — его имя.

Зайдите в командную строку контейнера:

После того как вы нашли ID или имя контейнера, используйте следующую команду:

docker exec -it <container_id_or_name> /bin/bash

    Замените <container_id_or_name> на ID или имя вашего контейнера.

После этого вы окажетесь внутри контейнера в его командной строке и сможете выполнять любые команды, как в обычной среде Ubuntu.

 


Если возникает такая ошибка:
docker run -it -p 9056:9056 -p 9057:9057 -p 9058:9058 my-ubuntu-container /bin/bash
Unable to find image 'my-ubuntu-container:latest' locally
docker: Error response from daemon: pull access denied for my-ubuntu-container, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.

Это из-за того, что Docker не может найти образ с именем my-ubuntu-container на вашем локальном компьютере или в Docker Hub. Это может произойти, если образ не был создан или не был указан правильный его тег.
Что нужно сделать:

    Убедитесь, что образ был успешно создан.

    Сначала проверьте, создали ли вы образ. Используйте команду:

docker images

Это выведет список всех образов, доступных на вашем компьютере. Найдите образ с именем my-ubuntu-container. Если его нет в списке, значит, образ не был создан.

Создайте образ, если его нет:

Если образ не был создан, перейдите в каталог, где находится ваш Dockerfile, и выполните команду для его создания:

docker build -t my-ubuntu-container .

Эта команда создаст Docker-образ с именем my-ubuntu-container.

Запустите контейнер:

После успешного создания образа снова выполните команду для запуска контейнера:

 docker run -it -p 9056:9056 -p 9057:9057 -p 9058:9058 my-ubuntu-container /bin/bash

Теперь контейнер должен запуститься, и вы попадёте в его командную строку.


Такая ошибка может быть:
[+] Building 1.9s (7/8)                                                                          docker:default
 => [internal] load build definition from Dockerfile                                                       0.0s
 => => transferring dockerfile: 538B                                                                       0.0s
 => [internal] load metadata for docker.io/library/ubuntu:20.04                                            1.8s
 => [internal] load .dockerignore                                                                          0.0s
 => => transferring context: 2B                                                                            0.0s
 => CANCELED [1/4] FROM docker.io/library/ubuntu:20.04@sha256:fa17826afb526a9fc7250e0fbcbfd18d03fe7a54849  0.0s
 => => resolve docker.io/library/ubuntu:20.04@sha256:fa17826afb526a9fc7250e0fbcbfd18d03fe7a54849472f86879  0.0s
 => => sha256:fa17826afb526a9fc7250e0fbcbfd18d03fe7a54849472f86879d8bf562c629e 1.34kB / 1.34kB             0.0s
 => => sha256:85c08a37b74bc18a7b3f8cf89aabdfac51c525cdbc193a753f7907965e310ec2 424B / 424B                 0.0s
 => => sha256:9df6d6105df2788299e5cbbf3dfd09aa6b3b5a10b784b214c35a035f76deb4ba 2.30kB / 2.30kB             0.0s
 => [internal] load build context                                                                          0.0s
 => => transferring context: 2B                                                                            0.0s
 => CACHED [2/4] RUN apt-get update && apt-get install -y default-jre                                      0.0s
 => ERROR [3/4] COPY /home/user/Cluster-v1.2.15a /home/Cluster-v1.2.15a                                0.0s
------
 > [3/4] COPY /home/user/Cluster-v1.2.15a /home/Cluster-v1.2.15a:

Ошибка на этапе COPY в Dockerfile указывает на то, что Docker не может найти каталог Cluster-v1.2.15a по указанному пути /home/user/Cluster-v1.2.15a на хостовой машине. Эта проблема возникает потому, что контекст сборки Docker не имеет прямого доступа к файлам за пределами текущего рабочего каталога (где находится Dockerfile).
Решение:

    Переместите каталог Cluster-v1.2.15a в тот же каталог, где находится Dockerfile.

    Например, если Dockerfile находится в каталоге /home/user/docker, переместите Cluster-v1.2.15a в этот каталог:

mv /home/user/Cluster-v1.2.15a /home/user/docker/Cluster-v1.2.15a

Обновите команду COPY в Dockerfile:

Теперь измените строку COPY в Dockerfile:

COPY Cluster-v1.2.15a /home/Cluster-v1.2.15a

Убедитесь, что путь к каталогу Cluster-v1.2.15a указывается относительно местоположения Dockerfile.

Соберите образ заново:

Выполните команду сборки Docker-образа в каталоге, где находятся Dockerfile и каталог Cluster-v1.2.15a:

docker build -t my-ubuntu-container .

Альтернативное решение:

Если вы хотите оставить каталог Cluster-v1.2.15a в /home/user/, вы можете изменить контекст сборки, указав полный путь:

docker build -t my-ubuntu-container -f /home/user/docker/Dockerfile /home/user/

В этом случае Docker будет использовать /home/user/ как контекст сборки, и команда COPY /home/user/Cluster-v1.2.15a /home/Cluster-v1.2.15a будет работать.


Если ваш Dockerfile находится в /home/user, и вы хотите скопировать каталог Cluster-v1.2.15a, который также находится в /home/user, то COPY команда должна работать без изменений, так как оба пути находятся в контексте сборки. Однако, если вы всё равно столкнулись с ошибкой, вот что можно сделать:
Проверка путей

    Проверьте существование каталога:

    Убедитесь, что каталог Cluster-v1.2.15a действительно существует в /home/user и что у вас есть к нему доступ:

ls -l /home/user/Cluster-v1.2.15a

Обновите Dockerfile, если нужно:

Если каталог существует и у вас есть к нему доступ, оставьте строку в Dockerfile как есть:


    COPY Cluster-v1.2.15a /home/Cluster-v1.2.15a

    Обратите внимание, что здесь используется относительный путь, так как контекст сборки задаётся относительно местоположения Dockerfile. То есть, COPY Cluster-v1.2.15a будет искать каталог Cluster-v1.2.15a в том же каталоге, где находится Dockerfile.

Запуск сборки

Если всё настроено правильно, выполните команду сборки снова:

docker build -t my-ubuntu-container /home/user

Возможные проблемы

Если проблема сохраняется:

    Убедитесь, что вы не используете символы /home/user в пути, так как Docker ожидает относительные пути внутри контекста сборки.
    Убедитесь, что Docker имеет доступ к файлам и каталогам (права доступа).

Дополнительные шаги

Если всё ещё возникают проблемы, вы можете попробовать добавить отладочную информацию:

    Попробуйте скопировать файл или небольшой каталог вместо большого каталога, чтобы увидеть, в чём может быть проблема.
    Попробуйте построить образ, указав более конкретный контекст сборки, чтобы исключить возможные конфликты.

Если все эти шаги не помогают, дайте знать, и мы рассмотрим другие варианты решения.