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