Re: [請益] docker容器連線不上問題PartII(懸賞1000p)

作者: ripple0129 (perry tsai)   2019-09-08 13:08:48
※ 引述《MOONY135 (脫俗仙子談無慾)》之銘言:
: ※ 引述《MOONY135 (脫俗仙子談無慾)》之銘言:
: : 最近在研究docker 容器
: : 想用寫好的go去連mysql
: : 這是我的docker-compose檔
: : https://pastebin.com/embed_js/2x5MgY2q
: : 這是go連線到mysql的設定
: : https://pastebin.com/embed_js/KrnH2DZ7
: : 當我docker-compose up之後
: : 我從終端機連到mysql 用root權限是可以進去的
: : 也看到已經create好的db
: 繼續第二問 想學的是code first的方式
: 用的是spf13/cobra這個套件 他可以根據你對專案下的參數去決定要啟用甚麼服務
: 我想把create table 跟 seed一點資料進mysql這兩件事情在啟動服務之前先做好
: (因為怕orm模型有變動 所以分開到其他專案這樣會很麻煩)
: 我的dockerfile最後是這樣寫的
: RUN ["db:reset"]
: RUN ["db:seed"]
: CMD ["http:start"]
: build容器會卡在RUN ["db:reset"]這一段 也試過
: CMD ["db:reset","db:seed","http:start"]
: 也都不行 是不是我想法不太對呢? 其實都是對另外一個mysql容器做事情
: 還是我需要用run and sleed呢
先觀念釐清下
CMD跟ENTRYPOINT 在一個dockerfile內
只能使用一次
超過一次的會被忽略掉
用途是啟動時執行
CMD是可替換的command
ENTRYPOINT 是必定執行的command
用範例來說
如果你CMD寫了echo hello
docker run myimage
這時候會出現hello
docker run myimage echo hi
這時候會出現hi
若使用ENTRYPOINT 則必定是出現hello
而RUN可使用多次
是在docker build的時候執行
按照你的需求
如果這些command應該是在
docker run時執行
不是在docker build時執行
所以不可以寫在RUN內
目前多數習慣的用法是
寫一支shell script或是python
在容器啟動時執行
譬如你的例子就是寫一支檔案
entrypoint.sh內容為
#!/bin/bash
echo "entrypoint executing"
http:start
db:reset
db:seed
echo "entrypoint done"
檔案內容是什麼再自行決定
畢竟大家無法知道你這些指令做什麼事
然後dockerfile最下方補上
COPY entrypoint.sh:/entrypoint.sh
ENTRYPOINT ["sh", "/entrypoint.sh"]
如果確定entrpoint有成功執行
還是有問題的話
就是你的cobra問題了
作者: MOONY135 (談無慾)   2019-09-08 13:29:00
感謝目前看logs我覺得應該是有相依的問題 mysql跟我的seeddb 同時被啟動 應該是要等mysql完全動起來之後再去做seed的事情 目前還在找怎樣等待mysql被啟起來cobra我在本機上而不是DOCKER上運行的時候沒問題很想sleep 不過現在不急 想說多研究一點正規方式lol
作者: Amused2Death (娛樂至死)   2019-09-08 22:10:00
推這篇

Links booklink

Contact Us: admin [ a t ] ucptt.com