2016-02-12 2 views
0

работает докер команды из Баш скрипт имеет разные результаты

Я использую socketplane/openvswitch Docker изображение. Когда я следую их инструкциям по сборке и выполнению команд OVS в запущенном контейнере, все работает нормально. Однако, когда я пытаюсь построить Баш скрипт для запуска и выполнения OVS команд возвращается контейнер с

db.sock: Database connection failed (Connection refused) 

На самом деле проблема, выполнив следующие команды в терминале:

docker run -itd --cap-add NET_ADMIN [container-name] 
docker exec $cid ovs-vsctl show 

преуспевает, но работает таких же команд в сценарии bash нет.

Это мой Баш скрипт:

#!/bin/bash 
cid=$(docker run -itd --cap-add NET_ADMIN [container-name]) 
docker exec $cid ovs-vsctl show 

Благодаря

+0

Мы не можем ответить на этот вопрос более подробно. По крайней мере, ссылка на то, какие инструкции вы следуете, чтобы вызвать проблему. И какая (последовательность) команд вы используете эту ошибку. – Sobrique

+0

[ask] является полезным ориентиром для создания хорошего вопроса. Представьте, я пытаюсь воспроизвести вашу ошибку в своей системе. Что мне нужно сделать? – Sobrique

+0

извините, изменил вопрос – Daniel

ответ

0

Моя мысль была бы, что корень вашей проблемы здесь:

docker run -itd 

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

  • -d говорит, что «бежит в фоновом режиме».
  • -it говорит: «Бегите в интерактивном режиме, прикрепите tty.

Так что я хотел бы предложить вам попробовать:

#!/bin/bash 
cid=$(docker run -d --cap-add NET_ADMIN [container-name]) 
docker exec $cid ovs-vsctl show 

В противном случае, мое второе предположение было бы - процесс запуска контейнера занимает некоторое время. Я получаю это при запуске kibana контейнеров - для начала требуется несколько секунд, поэтому я получаю ошибки «отказа в доступе».

Попробуйте приклеить «спать» там, как простой тест, но если это проблема, вам нужно будет проверить запуск базы данных и посмотреть, где вы «добрались».

В противном случае вы можете «прикрепить» к вашему контейнеру интерактивно, с помощью docker exec -it <container> bash и запустить команду и устранить неполадки напрямую.

+0

«sleep 3» сделал работу. Благодаря! (Я также удалил 'it' из '-itd', как вы предложили) – Daniel

+0

Следующий шаг может помочь выяснить, как вы можете «обнаружить» открытие порта - вы можете обнаружить, что есть запись в журнале, которую вы можете проверить. – Sobrique

+0

Спасибо за очень полезный совет. – Daniel

Смежные вопросы