Хост символьной ссылки на контейнер Docker

Ну, в основном я хочу создать символическую ссылку «ln -s» от моего хоста до моего контейнера.

Подводя итог: папка хоста .m2 хоста должна иметь символическую ссылку на папку .m2 внутри моего контейнера, например: $ ln -s containerIp: /root/.m2 myContainerAlias

Я видел сообщения ниже, но они мне не помогли, так как я не хочу копировать файлы на свой локальный хост.

Docker - копирование файла из контейнера на хост

Apache в Docker говорит: символическая ссылка не разрешена

https://omarabid.com/symlink-to-a-mounted-volume-in-docker/

Отредактировано:

Я нашел здесь еще одну важную проблему:

Как смонтировать каталог в докере контейнер на хост? Спасибо ...


person Bevilaqua    schedule 05.02.2016    source источник


Ответы (4)


Похоже, вы пытаетесь оптимизировать сборку Maven, работающую внутри контейнера?

docker run -it --rm -w /opt/maven \
   -v $PWD:/opt/maven \
   -v $HOME/.m2:/root/.m2 \
   maven:3.3-jdk-8 \
   mvn clean install

Пример

person Mark O'Connor    schedule 06.02.2016
comment
Спасибо за ответ, Марк О'Коннор, но на самом деле мне нужно противоположное: я не хочу иметь .m2 на моем хост-компьютере, только в контейнере (уже установленном в DockerFIle во время сборки) , и, таким образом, всем другим разработчикам, которые будут использовать контейнер, не придется загружать файлы на свои собственные хосты. - person Bevilaqua; 10.02.2016
comment
@Bevilaqua Так работает Maven по умолчанию (jar-файлы кэшируются в /root/.m2). Лично я считаю, что общие jar-файлы между разработчиками, использующими файлы внутри контейнера, немного негибкие. Альтернативой может быть запуск экземпляра Nexus, позволяющего локально кэшировать jar-файлы для всех разработчиков в вашей организации. См. Следующий пример: stackoverflow.com/questions/27767264/ - person Mark O'Connor; 12.02.2016

Для дальнейшего исследования этого вопроса. Я хотел бы сообщить, что я «решил» свою проблему с помощью того же подхода, что и @Kai Hofstetter, в следующем сообщении: Как подключить каталог в контейнере докера к хосту?

person Bevilaqua    schedule 10.02.2016
comment
Как вы ее решили? Подход, упомянутый в связанном вопросе, использует копию, и это действительно неэффективно (пространство, время) ... Нет лучшего решения? - person Nishant; 28.09.2020

Если вы хотите обмениваться данными между хостом и контейнером или наоборот, вам необходимо использовать объем докера.

Есть много способов сделать это, но в вашей ситуации самый простой - это смонтировать каталог хоста как том данных. Это делается с помощью флага -v в докере. Например, docker run -it -v /path/to/.m2:/root/.m2 ubuntu:latest /bin/bash запустит образ ubuntu:latest с каталогом хоста /path/to/.m2, «привязанным» к каталогу контейнера /root/.m2.

Надеюсь, это поможет.

person JamesStewy    schedule 06.02.2016
comment
Привет, JamesStewy, прежде всего спасибо за ответ ... Ну, я уже использую том для другой цели, и, насколько я понимаю, чтобы использовать его, мне нужно, чтобы файлы на моем хосте отображали их в контейнер (поправьте меня, если я надену, пожалуйста). Кроме того, я действительно хочу ссылаться только на файлы зависимостей внутри каталога .m2, делая это с моего хоста (без наличия зависимостей внутри моего хоста). - person Bevilaqua; 10.02.2016

Нет, вы не можете создать символическую ссылку между хостом и контейнерами. см. Смонтируйте каталог хоста с символическим ссылка внутри в контейнере докеров

одно решение - смонтировать тома в момент запуска:

docker run -v /home/test/:/home/test -v /mnt/mountedfile:/mnt/mountedfile

person Siwei    schedule 16.12.2020