2013-09-25 100 views
4

我使用Dockerfile構建映像,並且我想在安裝後立即將用戶添加到RabbitMQ。問題是,在構建期間docker容器的主機名與我運行結果圖像時不同。 RabbitMQ丟失該用戶;由於改變主機名,它使用另一個數據庫。docker rabbitmq主機名問題

我從粗野,容器內改變/etc/hosts/etc/hostname文件,看起來是RabbitMQ的不接我的變化RABBITMQ_NODENAMEHOSTNAME變量。

,我找到了工作開始的RabbitMQ代理之前運行此的唯一的事情:

echo "[email protected]" >> /etc/rabbitmq/rabbitmq.conf.d/ewos.conf 

但後來我將不得不與改變主機運行泊塢窗圖像的所有時間。

docker run -h="localhost" image 

關於可以做什麼的任何想法?也許解決方案是將用戶添加到RabbitMQ而不是構建,但在圖像運行?

回答

1

是的,我建議在容器第一次運行時添加用戶。

而不是直接啓動RabbitMQ,你可以運行一個包裝腳本,將負責所有的設置,然後啓動RabbitMQ。如果包裝腳本的最後一步是進程啓動,請記住您可以使用exec,以便新進程替換腳本本身。

+0

也出現了一個問題:當我添加一個用戶和停止的RabbitMQ之後,添加的用戶不會持續。在RabbitMQ停止命令之前添加一些「睡眠3」,解決了問題。 –

+0

這不是解決方案,因爲應該使用Dockerfile構建圖像,而不是每次從Docker鏡像執行部署時都必須運行容器來進行設置。 – Rubycut

+0

@Rubycut你是對的。你有沒有測試過,你的答案在下面?直到這個時候,我還沒有看到以分號分隔的命令執行。你是否像上面那樣遇到了持續配置的問題? –

6

只是我這裏是如何從Dockerfile正確配置:

ENV HOSTNAME localhost 

RUN /etc/init.d/rabbitmq-server start ; rabbitmqctl add_vhost /test; /etc/init.d/rabbitmq-server stop 

這是記住你的配置。

+0

似乎工作。不確定調用節點本地主機的含義。 –

0

這就是我做到的。

Dockerfile

FROM debian:jessie 

MAINTAINER Francesco Casula <[email protected]> 

VOLUME ["/var/www"] 
WORKDIR /var/www 

ENV HOSTNAME my-docker 
ENV RABBITMQ_NODENAME [email protected] 

COPY scripts /root/scripts 

RUN /bin/bash /root/scripts/os-setup.bash && \ 
    /bin/bash /root/scripts/install-rabbitmq.bash 

CMD /etc/init.d/rabbitmq-server start && \ 
    /bin/bash 

OS-setup.bash

#!/bin/bash 

echo "127.0.0.1 localhost" > /etc/hosts 
echo "127.0.1.1 my-docker" >> /etc/hosts 

echo "my-docker" > /etc/hostname 

安裝-rabbitmq.bash

#!/bin/bash 

echo "[email protected]" > /etc/rabbitmq/rabbitmq-env.conf 

echo 'deb http://www.rabbitmq.com/debian/ testing main' | tee /etc/apt/sources.list.d/rabbitmq.list 
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | apt-key add - 
apt-get update 

cd ~ 
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server_3.6.5-1_all.deb 
dpkg -i rabbitmq-server_3.6.5-1_all.deb 
apt-get install -f -y 

/etc/init.d/rabbitmq-server start 

sleep 3 

rabbitmq-plugins enable amqp_client mochiweb rabbitmq_management rabbitmq_management_agent \ 
         rabbitmq_management_visualiser rabbitmq_web_dispatch webmachine 

rabbitmqctl delete_user guest 
rabbitmqctl add_user bunny password 
rabbitmqctl set_user_tags bunny administrator 
rabbitmqctl delete_vhost/
rabbitmqctl add_vhost symfony_prod 
rabbitmqctl set_permissions -p symfony_prod bunny ".*" ".*" ".*" 
rabbitmqctl add_vhost symfony_dev 
rabbitmqctl set_permissions -p symfony_dev bunny ".*" ".*" ".*" 
rabbitmqctl add_vhost symfony_test 
rabbitmqctl set_permissions -p symfony_test bunny ".*" ".*" ".*" 

/etc/init.d/rabbitmq-server restart 

IS_RABBIT_INSTALLED=`rabbitmqctl status | grep RabbitMQ | grep "3\.6\.5" | wc -l` 

if [ "$IS_RABBIT_INSTALLED" = "0" ]; then 
    exit 1 
fi 

IS_RABBIT_CONFIGURED=`rabbitmqctl list_users | grep bunny | grep "administrator" | wc -l` 

if [ "$IS_RABBIT_CONFIGURED" = "0" ]; then 
    exit 1 
fi 

別不要忘記通過與-h標誌指定正確的主機來運行容器:

docker run -h my-docker -it --name=my-docker -v $(pwd)/htdocs:/var/www my-docker