Как проверить, существует ли папка в контейнере docker с хоста

#docker

#docker

Вопрос:

Я хочу проверить, существует ли папка в моем вызываемом контейнере docker mysqlserver . Контейнер представляет собой Linux-машину.

работает следующая команда:

 # both commands print the current working directory
docker exec -it mysqlserver pwd
# output: /
docker exec -it mysqlserver 'pwd'
# output: /
  

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

 docker exec -it mysqlserver test -d /var
# output: nothing
  

даже несуществующая папка ничего не выводит:

 docker exec -it mysqlserver test -d /var
# output: nothing
  

Что мне нужно сделать, чтобы оценить, существует ли папка внутри контейнера?

Ответ №1:

test Команда ничего не выводит. Он просто возвращает 0 (true), если тест прошел успешно, или 1 (false), если это не так.

Если вам требуется вывод, вам нужно будет выполнить вторую команду. Например

 test -d /var/some/dir amp;amp; echo 'It Exists'
  

Чтобы сделать это в контейнере, вам нужно будет использовать оболочку:

 docker exec -it mysqlserver sh -c "test -d /var/some/dir amp;amp; echo 'It Exists'"
  

Обратите пристальное внимание на кавычки.

Комментарии:

1.Для тех, кто хочет запустить это в сценарии оболочки на хост-компьютере и вывести «Оно существует» в командной строке хоста, запустите amp;amp; echo 'It Exists' после команды docker exec, например docker exec -it mysqlserver sh -c "test -d /var/some/dir" amp;amp; echo 'It Exists'

Ответ №2:

test не предоставляет выходных данных, которые вы должны проверить код выхода.

 $ test -d /var
$ echo $?
0 -> Exists

$ test -d /hello_world
$ echo $?
1 -> Doesn't exist
  

Если вы хотите «исследовать» свой контейнер, откройте для него интерактивный сеанс.

 docker exec -ti <container_name> sh