gogs mysql 报错_docker上对gogs二次开发
甲方需求是在一個容器上啟動mysql服務,另一個容器上搭gogs,且gogs可修改
一開始的想法是搭一個go容器,然后源碼發上去直接改,然后發現不行,主要原因是我pull了golang的鏡像,但是似乎應該用alpine,總之這塊沒弄清楚自己想要不就在centos上搭唄。
首先安裝mysql
run mysql
# 用于存放mysql數據文件
mkdir /opt/docker/data/mysql/data
# 用于存放mysql配置文件
mkdir /opt/docker/data/mysql/conf
cd /opt/docker/data/mysql/conf
在/opt/docker/data/mysql/conf目錄下建立3個mysql配置文件 docker.cnf, mysql.cnf,
mysqldump.cnf
docker.cnf 內容
[mysqld]
skip-host-cache
skip-name-resolve
mysql.cnf內容
[mysql]
default-character-set = utf8
[mysql_safe]
default-character-set = utf8
[client]
default-character-set = utf8
[mysqld]
pid-file? ? ? = /var/run/mysqld/mysqld.pid
socket? ? ? ? = /var/run/mysqld/mysqld.sock
datadir? ? ? = /var/lib/mysql
#log-error? ? = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# 修改mysql默認字符集
init_connect? = 'SET NAMES utf8'
character-set-server = utf8
collation-server = utf8_unicode_ci
mysqldump.cnf內容
[mysqldump]
quick
quote-names
max_allowed_packet? = 16M
啟動mysql服務
docker run -d --name mysql56 --net=backend -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v
/opt/docker/data/mysql/data:/var/lib/mysql -v /opt/docker/data/mysql/conf:/etc/mysql/conf.d
mysql:5.6
在數據庫中創建庫gogs,utf-8
docker exec -it mysql56 bash進入到容器中,mysql -u root -p進入mysql然后create database什么的
然后就是艱苦的gogs嘗試記錄,我先把正確的方法寫下來,后面的是踩坑記錄腦子也挺亂的可能比較難看
1.直接運行gogs鏡像:
docker run -d -p 10022:22 -p 10080:3000 --name=gogs1 --net=backend -v
/opt/docker/gogs/:/data gogs/gogs
問題:無法進行二次開發,基礎鏡像內文件無法更改。
2.源碼gogs搭建
本地編譯得到gogs文件
go build gogs.go
把整個項目壓縮成tar包
tar -zxvf gogs gogs.tar
下載go
wget https://studygolang.com/dl/golang/go1.10.1.linux-amd64.tar.gz
打包go環境變量
vi go.sh
內容為
export GOROOT=/data/work/go
export GOPATH=/data/work/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
下拉centos鏡像
docker pull centos
建立dockerfile
vi DockerfileFROM centos:latest
#維護者信息
MAINTAINER TEST@TEST.COM
#設置用戶
RUN groupadd git && useradd -r -g git git
RUN mkdir /home/git
RUN mkdir /gogs
RUN mkdir /go
run chmod 777 /go
RUN chmod 777 /gogs
RUN mkdir /root/gogs
RUN mkdir /root/go
RUN chmod 777 /root/go
RUN chmod 777 /root/gogs
RUN mkdir /usr/local/git
RUN chmod 777 /usr/local/git
#將服務器的go工程代碼加入到docker容器中
COPY ./gogs.tar /gogs
COPY ./go1.12.6.linux-amd64.tar.gz /root
#COPY ./git-2.9.5.tar.gz /usr/local/git/
#源碼安裝git太麻煩還是用yum了,但是這樣會導致每次build都要下載git
COPY ./go.sh /etc/profile.d/
#COPY ./git.sh /etc/profile.d/
#RUN tar -C /usr/local/git -zxvf /usr/local/git/git-2.9.5.tar.gz
#RUN cd /usr/local/git/git-2.9.5 && ls -a && ./configure --prefix=/usr/local/git && make && make install
RUN yum install -y git
RUN git --version
RUN tar -C /usr/local/ -zxvf /root/go1.12.6.linux-amd64.tar.gz && ls -a /usr/local/go
RUN tar -zxvf /gogs/gogs.tar
RUN source /etc/profile.d/go.sh
#RUN source /etc/profile.d/git.sh
#RUN go env#這句話運行不了
RUN chmod -R 777 /root
RUN chmod -R 777 /home
RUN chmod -R 777 /usr
RUN chmod -R 777 /opt
RUN ls -a /root/gogs
RUN rm -f /root/go1.12.6.linux-amd64.tar.gz
RUN rm -f /gogs/gogs.tar
WORKDIR /root/gogs
USER root
RUN whoami
#暴露端口
EXPOSE 3000
EXPOSE 22
#最終運行docker的命令
CMD ["./gogs","web"]
這段里面給權限安全隱患較大但是因為在docker容器內也沒那么危險了,主要是為了讓git用戶有權限
源碼gogs搭建錯誤歷史
本地編譯得到gogs文件
go build gogs.go
上傳到linux
//docker run -it? -v /root/gogs:/gogs -v /root/test/:/test -p 10022:22 -p 10080:3000 --name=gogs
--privileged centos bash
docker run -it -v /root/test/:/test -p 10022:22 -p 10080:3000 --name=gogs --network=backend --
privileged golang bash
//cd src/github.com/gogs/gogs/
//go build
./gogs web
進入網頁http://192.168.152.128:10080/
數據庫mysql56:3306
報錯:運行系統用戶非當前用戶:root ->
原因分析:gogs依賴于git服務,沒有安裝gitX
使用git用戶運行
su - git -c "cd /go/src/github.com/gogs/gogs && ./gogs web &"
編譯后轉到linux上運行不了,報錯:[FATAL] [...gogs/gogs/cmd/web.go:66 checkVersion()] Fail to read
'templates/.VERSION': open /test/templates/.VERSION: no such file or directory
找不到文件
目前問題:install后無法訪問http://192.168.152.128:10080/ 配置文件嘗試
[server]
DOMAIN? ? ? ? ? = localhost
HTTP_PORT? ? ? ? = 3000
ROOT_URL? ? ? ? = http://localhost:10080/? ## 這個就是圖形界面的應用URL的值
DISABLE_SSH? ? ? = false
SSH_PORT? ? ? ? = 10022
START_SSH_SERVER = false
OFFLINE_MODE? ? = false
錯誤
如果配置文件沒問題,是否設置端口號有問題?
docker建立鏡像和導出到文件
docker commit 4977b34adaee mysql56
4977b34adaee為容器名 mysql56為鏡像名
docker save -o mysql56 mysql56
儲存鏡像為文件,前一個mysql56為文件名,后一個為鏡像名
測試:刪除docker鏡像后導入文件
docker stop 所有容器后
docker rmi mysql56
導入docker鏡像
docker load --input mysql56
總結
以上是生活随笔為你收集整理的gogs mysql 报错_docker上对gogs二次开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ mysql 配置_C++--my
- 下一篇: java hashset 源码_Java