2016-04-27 816 views
1

我想修改docker映像中的conf文件,但是,我不想重新構建docker映像,我想通過「碼頭運行....命令」來做到這一點。我將在命令中加入一個「echo XXX >> /etc/XXX.conf」。這可能嗎?如何追加/修改Docker容器中的文件'docker run .... [命令]'

例如,我想啓動一個redis sentinel集羣,其中包括至少2個redis-server和1個redis-sentinel。第二個redis服務器容器在redis.conf中需要狀態「slaveof」。

我這樣做在下面的步驟:

  1. 啓動Redis的服務器與端口6479 docker run -d -p 6479:6379 docker.io/redis

  2. 開始從Redis的服務器與6579採用相同的碼頭工人的圖像,並說明這是一個從在conf文件: docker run -d -p 6579:6379 docker.io/redis "/bin/echo 'slaveof 192.168.1.149 6479' >> /etc/redis.conf && redis-server /etc/redis.conf"

這裏COMMAND關於'搬運工運行」是: 「/斌/回波 'slaveof 192.168.1.149 6479' >> /etc/redis.conf & & redis的服務器/etc/redis.conf」

  • 啓動哨兵,這是另一個碼頭的圖像。
  • 但是,我停在第二步。它返回這樣的錯誤消息:

    /entrypoint.sh:第10行:/斌/回聲 'slaveof 192.168.1.149 6479' >> /etc/redis.conf & & Redis的服務器的/ etc/Redis的.conf:沒有這樣的文件或 目錄

    那麼,如何注入或修改conf文件通過'碼頭運行'子句?

    回答

    1

    首先啓動你的容器,給它一些名稱稍後您將需要(它更容易比仰視容器的id)

    docker run --name container-name -d -p 6479:6379 docker.io/redis 
    docker run --name aaaaa   -d -p 6479:6379 docker.io/redis 
    

    如果您需要登錄到運行的容器問題

    docker exec -ti aaaaa /bin/bash 
    

    這將給你一個在容器內的交互式shell會話,你可以隨意發出命令......如果你只是想在運行容器內發出一個沒有交互式方面問題的命令

    docker exec -ti aaaaa /some/command 
    

    如該/一些/命令將在容器內被執行...所以像這樣在你的情況

    docker exec -ti aaaaa "/bin/echo 'slaveof 192.168.1.149 6479' >> /etc/redis.conf && redis-server /etc/redis.conf" 
    
    +0

    感謝斯科特,這並不爲我工作。順便說一句,碼頭的aaaaa應該使用端口6579 :) 我檢查了你的方法通過這兩種方法: a)從主機運行「redis-cli -p 6579信息複製」,它仍然說這redis是主人,但如果一切正常,它應該是奴隸。 b)我通過「docker exec -ti aaaaaa/bin/bash」登錄,沒有/etc/redis.conf。這意味着'回聲.....'不起作用。 最後,我認爲「docker exec」子句不適用,因爲docker容器已經啓動並且功能正常。 「docker exec」不會影響現有的redis服務器行爲。 – Cross

    相關問題