iT邦幫忙

0

關於將SmartFoxServer透過Dockerfile buitld 成 image問題 (感謝 nansen 協助解決)

小弟想將SmartFoxServer buitld image儲存起來,因此將官網的手動安裝流程

(http://docs2x.smartfoxserver.com/GettingStarted/install-linux)

寫成Dockerfile

FROM centos:7
MAINTAINER scott

RUN yum install -y wget

WORKDIR /etc

RUN wget  https://www.smartfoxserver.com/download/get/267/SFS2X_unix_2_14_0.tar

RUN tar xf SFS2X_unix_2_14_0.tar

WORKDIR /etc/SmartFoxServer_2X/SFS2X

RUN ./sfs2x-service start

但會出現兩個問題

  1. SmartFoxServer 服務無法自動啟動,但可以進入容器後手動啟動
  2. images無法啟動,狀態會一直顯是 Restarting (0) 4 seconds ago

查看 Docker logs,也似乎因為沒有啟動無法查看

https://ithelp.ithome.com.tw/upload/images/20200210/20114520EGjzJQVljC.png

後來在DockerHub有找到IT前輩寫好的dockerfile,參考後發現,這是寫在UNIX作業環境的

因此想上來詢問,是否有CentOS7的寫法或建議,可能我哪裡誤解,寫錯了

https://hub.docker.com/r/timlien/docker-smartfox/dockerfile

1 個回答

0
nansen
iT邦新手 3 級 ‧ 2020-02-10 10:36:59
最佳解答

把 sfs2x-service 啟動 script 的 nohup 移除就可以了

$INSTALL4J_JAVA_PREFIX nohup "$app_java_home/bin/java"

看更多先前的回應...收起先前的回應...

意思是說替換成

RUN $INSTALL4J_JAVA_PREFIX nohup "$app_java_home/bin/java"

對嗎?我試試

nansen iT邦新手 3 級 ‧ 2020-02-10 10:53:16 檢舉

另一個問題是最後一個entrypoint啟動進入點,應該用 CMD 而不是 RUN 命令
CMD ./sfs2x-service start

https://philipzheng.gitbooks.io/docker_practice/content/dockerfile/instructions.html

剛剛也去了解了一下,用途

受教了,感謝

CMD $INSTALL4J_JAVA_PREFIX nohup "$app_java_home/bin/java"

好吧 .. 我剛剛測試了一下,結果也是跟原本一樣

進入容器查看,發現服務沒啟動
啟動容器,也是顯示Restarting (127) 1 second ago

nansen iT邦新手 3 級 ‧ 2020-02-10 11:15:57 檢舉
FROM centos:7
MAINTAINER scott

RUN yum install -y wget

WORKDIR /etc

RUN wget  https://www.smartfoxserver.com/download/get/267/SFS2X_unix_2_14_0.tar

RUN tar xf SFS2X_unix_2_14_0.tar

WORKDIR /etc/SmartFoxServer_2X/SFS2X

#CMD ./sfs2x-service start
CMD ./sfs2x-service start-launchd

使用docker run -d sfs 來建立容器與啟動

https://ithelp.ithome.com.tw/upload/images/20200210/201145202I6XDSa6ik.png

有了!!感謝!!

目前我要測試網頁,應該是要執行

docker run -d --name sfs -p 8080:80 --restart always sfs:latest

對吧 (確定防火牆已關)

nansen iT邦新手 3 級 ‧ 2020-02-10 11:31:33 檢舉

建議可以使用docker-compose的yml來設定容器參數

好的,謝謝您的建議跟協助,我會繼續嘗試及鑽研這一部分

nansen

哈哈,悲劇,覺得自己好菜 - -

我在Dockerfile 加入了 EXPOSE 8080

https://ithelp.ithome.com.tw/upload/images/20200210/20114520UdHgTalzUH.png

確實也讓生成的容器開了 8080 PORT

也確實關閉了防火牆,但卻依然無法訪問 (尷尬)

https://ithelp.ithome.com.tw/upload/images/20200210/20114520rkD7HoIuVy.png

查看logs 也沒看到什麼異常

nansen iT邦新手 3 級 ‧ 2020-02-11 14:04:21 檢舉

EXPOSE 並不會真的mapping或開放port只是顯示一個提示而已
如果是用docker run 啟動的情況還是需要使用 -p 參數來設定要啟用(mapping)的port
如果是測試可以將network mode設定為host用以省略port mapping的設定

我試試,最早我是嘗試

docker run -d -p 8080:80 sfs

正常來說這樣應該要能通,也確實有啟動
https://ithelp.ithome.com.tw/upload/images/20200212/20114520FIbZbsH4OD.png

防火牆也確實關閉了

不過,這樣還是無法訪問

我解決了,感謝

docker run -d -p 8080:8080 sfs

觀念太差,沒留意到SFS預設是8080訪問

我要發表回答

立即登入回答