Cider: [Обсудить] Как позволить CIDER использовать образ докера Clojure?

Созданный на 25 дек. 2018  ·  8Комментарии  ·  Источник: clojure-emacs/cider

Это обсуждение, но для того, чтобы вести записи, и это может помочь другим людям. Я записываю это здесь. Я знаю, что в Slack есть канал #cider/#emacs . Я отправлю эту ссылку там.

Я хочу использовать другую версию и среду Clojure. Есть официальный образ Clojure Docker. https://hub.docker.com/_/clojure

Я думаю, как использовать двоичный файл образа Clojure и REPL в Emacs и CIDER.

Насколько я знаю, есть несколько способов получить доступ к образу Docker:

  • запущенный контейнер, который запустил Clojure REPL, пользователь может прикрепить его с помощью пакета Emacs docker.el .
  • используйте пакет Emacs docker-tramp.el и docker.el для доступа к двоичным командам контейнера clojure, таким как clojure , clj и т. д. Чтобы Emacs использовал их как путь к исполняемым командам. Как и у CIDER есть опция настройки cider-clojure-cli-command . Я пробовал подписаться, но не смог.
(add-to-list 'exec-path "/docker:clojure:/usr/local/bin/")
(setq cider-clojure-cli-command "/docker:clojure:/usr/local/bin/clojure")
  • запустите образ clojure, чтобы открыть порт ip: для хост-системы. Так что Emacs может получить доступ к контейнеру Docker точно так же, как и к локальной хост-системе. Я пока не знаю, как это сделать.

У кого-нибудь есть предложение и решение? Добро пожаловать, чтобы добавить. (Это могло бы добавить в Wiki, когда обсуждение почти) Спасибо за просмотр.

Самый полезный комментарий

@darkleaf Понятно . Спасибо.

@zilti switch версия Java, версия Clojure проще на Docker? и это чище. Легко упаковать изображение, а затем поделиться, проще воспроизвести проблему окружающей среды. Я признаю, что Leiningen и Boot (я сам им не пользовался) - это здорово. Тем не менее, спасибо за совет.

Все 8 Комментарий

Я обнаружил, что у CIDER есть переменная для хранения записей о подключениях. Может использоваться в верхнем регистре.

Нравится:

(setq cider-known-endpoints
  '(("host-a" "10.10.10.1" "7888")
    ("host-b" "7888")))
  • использовать поддержку SSH удаленного хоста CIDER для SSH в контейнере Docker
  • Используйте прозрачную поддержку TRAMP CIDER, чтобы использовать пакет Emacs docker-tramp.el для открытия файлов в контейнере, тогда cider-jack-in-* , CIDER может прозрачно обработать это.

Использую docker-compose и тома:

# docker-compose.yml
version: '3'

volumes:
  m2:
  gitlibs:

services:
  app:
    image: clojure:tools-deps-alpine
    working_dir: "${PWD}"
    command: "true"
    ports:
      - "4444:4444" # nrepl
      - "4445:4445" # http
    environment:
      - "CLJ_CONFIG=${PWD}/.docker-clojure"
      - DATABASE_URL=postgres://postgres:password<strong i="6">@db</strong>:5432/postgres
      - TEST_DATABASE_URL=postgres://postgres:password@test-db:5432/postgres
      - PORT=4446
    volumes:
      - ".:${PWD}:cached" # cached - MacOS option
      - m2:/root/.m2
      - gitlibs:/root/.gitlibs
    links:
      - db
      - test-db
  db: &db
    image: postgres:10.4-alpine
    environment:
      - POSTGRES_PASSWORD=password
  test-db:
    <<: *db
;; .docker-clojure/deps.edn
{:aliases {:cider {:extra-deps {darkleaf/cider-tools-desp
                                {:git/url "https://github.com/darkleaf/cider-tools-deps.git"
                                 :sha     "1025b510db24b36ab741bc5599e36806eec904ec"}}
                   :main-opts  ["-m" "darkleaf.cider-tools-deps"
                                "port" "4444" "host" "0.0.0.0"]}
           :repl  {:extra-deps {darkleaf/repl-tools-deps
                                {:git/url "https://github.com/darkleaf/repl-tools-deps.git"
                                 :sha     "04e128ca67785e4eb7ccaecfdaffa3054442358c"}}
                   :main-opts  ["-m" "darkleaf.repl-tools-deps"]}

           :run-tests {:extra-deps {com.cognitect/test-runner
                                    {:git/url "https://github.com/cognitect-labs/test-runner.git"
                                     :sha     "028a6d41ac9ac5d5c405dfc38e4da6b4cc1255d5"}}
                       :main-opts  ["-m" "cognitect.test-runner"]}

           :coverage {:extra-deps {cloverage {:mvn/version "1.0.13"}}
                      :main-opts  ["-m" "cloverage.coverage" "-p" "src"  "-s" "test"]}}}

Я запускаю docker-compose run --rm --service-port app bash а затем clojure -Acider .
В emacs я нажимаю C-c M-c и подключаюсь к localhost:4444 .

Зависимости устанавливаются в тома. Таким образом, Emacs не может иметь к ним доступа.

Зависимости устанавливаются в тома. Таким образом, Emacs не может иметь к ним доступа.

Я запутался в этом. Зависимости устанавливаются в тома, но Emacs CIDER подключается к контейнеру, запущенному псевдонимом clojure -Acider . Итак, если clojure -Acider должен иметь доступ ко всем зависимостям в контейнере. Добавить зависимости проекта в контейнер deps.edn файл?

Может ли Docker получить доступ к зависимостям .m2/ хост-системы? Так что Docker будет мостом между Emacs CIDER и зависимостями хост-системы.

У нас есть Maven и такие инструменты, как Boot и Leiningen, зачем вообще здесь Docker? Просто потому, что это модно?

@stardiviner

Я запутался в этом.

REPL запускается внутри контейнера докеров. У этого процесса есть доступ к файловой системе контейнера.
с путями, связанными с контейнером. Заблокировать раздел объемов:

    volumes:
      - ".:${PWD}:cached" # cached - MacOS option
      - m2:/root/.m2
      - gitlibs:/root/.gitlibs

Например, $PWD - это /User/darkleaf/projects/project . Итак, исходники проекта
доступно по тому же пути внутри контейнера.
В этом есть смысл. REPL может послать Emacs некоторый путь, и этот путь связан с контейнером.
Emacs не может получить файл в файловой системе хоста, если пути несовместимы.
Поэтому я использую ${PWD} .

Позже я использовал для монтирования .m2 и .gitlibs из файловой системы хоста.
Я использую Docker для Mac, и его хост-тома медленные. Поэтому я перешел на контейнерные объемы.

@darkleaf Понятно . Спасибо.

@zilti switch версия Java, версия Clojure проще на Docker? и это чище. Легко упаковать изображение, а затем поделиться, проще воспроизвести проблему окружающей среды. Я признаю, что Leiningen и Boot (я сам им не пользовался) - это здорово. Тем не менее, спасибо за совет.

Кажется, вы разобрались, поэтому я закрою этот тикет.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги