前言
在开发某个产品的时候,后端用到了sqlite数据,为方便管理,在测试环境使用了 sqlite-web 做数据查询,但是查询的时候发现时间不对。
Dockerfile
然后看一下作者的Dockerfile:
FROM python:3-alpine3.7
ENV CFLAGS="-DSQLITE_DEFAULT_CACHE_SIZE=-8000 \
-DSQLITE_DEFAULT_FOREIGN_KEYS=1 \
-DSQLITE_DEFAULT_MEMSTATUS=0 \
-DSQLITE_DEFAULT_PAGE_SIZE=4096 \
-DSQLITE_DEFAULT_SYNCHRONOUS=0 \
-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=0 \
-DSQLITE_DISABLE_DIRSYNC \
-DSQLITE_ENABLE_COLUMN_METADATA \
-DSQLITE_ENABLE_DESERIALIZE \
-DSQLITE_ENABLE_FTS3 \
-DSQLITE_ENABLE_FTS3_PARENTHESIS \
-DSQLITE_ENABLE_FTS4 \
-DSQLITE_ENABLE_FTS5 \
-DSQLITE_ENABLE_JSON1 \
-DSQLITE_ENABLE_MEMDB \
-DSQLITE_ENABLE_STAT4 \
-DSQLITE_ENABLE_STMTVTAB \
-DSQLITE_ENABLE_UNLOCK_NOTIFY \
-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT \
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
-DSQLITE_MAX_EXPR_DEPTH=0 \
-DSQLITE_SOUNDEX \
-DSQLITE_STMTJRNL_SPILL=-1 \
-DSQLITE_TEMP_STORE=3 \
-DSQLITE_USE_ALLOCA \
-DSQLITE_USE_URI \
-DSQLITE_DEFAULT_WAL_AUTOCHECKPOINT=512 \
-DHAVE_USLEEP \
-O2 -fPIC"
RUN apk update \
&& apk add --no-cache --virtual .build-deps build-base libressl coreutils gcc libc-dev linux-headers make tar wget tcl tcl-dev dpkg dpkg-dev \
&& wget https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release -O sqlite.tar.gz -q \
&& tar xzf sqlite.tar.gz \
&& cd sqlite \
&& buildArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \
&& LIBS="-lm" PREFIX="/usr/local" ./configure --build="$buildArch" --disable-tcl --enable-shared --enable-static --enable-tempstore=always --prefix="/usr/local" \
&& make -j4 \
&& make install \
&& cd ../ \
&& rm -rf ./sqlite/ ./sqlite.tar.gz \
&& pip install --upgrade pip \
&& pip install --no-cache-dir cython \
&& pip install --no-cache-dir flask peewee sqlite-web \
&& apk del .build-deps
EXPOSE 8080
VOLUME /data
WORKDIR /data
CMD sqlite_web -H 0.0.0.0 -x $SQLITE_DATABASE
发现没做时区配置,应该走的 UTC,进容器,看下时间
果然。。。果断自己改一下
Dockerfile 改造
FROM python:3-alpine3.7
ENV CFLAGS="-DSQLITE_DEFAULT_CACHE_SIZE=-8000 \
-DSQLITE_DEFAULT_FOREIGN_KEYS=1 \
-DSQLITE_DEFAULT_MEMSTATUS=0 \
-DSQLITE_DEFAULT_PAGE_SIZE=4096 \
-DSQLITE_DEFAULT_SYNCHRONOUS=0 \
-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=0 \
-DSQLITE_DISABLE_DIRSYNC \
-DSQLITE_ENABLE_COLUMN_METADATA \
-DSQLITE_ENABLE_DESERIALIZE \
-DSQLITE_ENABLE_FTS3 \
-DSQLITE_ENABLE_FTS3_PARENTHESIS \
-DSQLITE_ENABLE_FTS4 \
-DSQLITE_ENABLE_FTS5 \
-DSQLITE_ENABLE_JSON1 \
-DSQLITE_ENABLE_MEMDB \
-DSQLITE_ENABLE_STAT4 \
-DSQLITE_ENABLE_STMTVTAB \
-DSQLITE_ENABLE_UNLOCK_NOTIFY \
-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT \
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
-DSQLITE_MAX_EXPR_DEPTH=0 \
-DSQLITE_SOUNDEX \
-DSQLITE_STMTJRNL_SPILL=-1 \
-DSQLITE_TEMP_STORE=3 \
-DSQLITE_USE_ALLOCA \
-DSQLITE_USE_URI \
-DSQLITE_DEFAULT_WAL_AUTOCHECKPOINT=512 \
-DHAVE_USLEEP \
-O2 -fPIC"
RUN apk update \
&& apk add --no-cache --virtual .build-deps build-base libressl coreutils gcc libc-dev linux-headers make tar wget tcl tcl-dev dpkg dpkg-dev \
&& wget https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release -O sqlite.tar.gz -q \
&& tar xzf sqlite.tar.gz \
&& cd sqlite \
&& buildArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \
&& LIBS="-lm" PREFIX="/usr/local" ./configure --build="$buildArch" --disable-tcl --enable-shared --enable-static --enable-tempstore=always --prefix="/usr/local" \
&& make -j4 \
&& make install \
&& cd ../ \
&& rm -rf ./sqlite/ ./sqlite.tar.gz \
&& pip install --upgrade pip \
&& pip install --no-cache-dir cython \
&& pip install --no-cache-dir flask peewee sqlite-web \
&& apk del .build-deps
ENV TZ=Asia/Shanghai
RUN apk add tzdata \
&& echo "${TZ}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
&& rm /var/cache/apk/*
EXPOSE 8080
VOLUME /data
WORKDIR /data
CMD sqlite_web -H 0.0.0.0 -x $SQLITE_DATABASE
核心代码如下:
ENV TZ=Asia/Shanghai
RUN apk update \
&& apk add tzdata \
&& echo "${TZ}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
&& rm /var/cache/apk/*
镜像构建
docker build -f Dockerfile -t githubwyj/sqlite-web .
PS: 由于网络原因,可能部分包下载会出错,这个建议在科学网络环境下进行操作
当然我这边已经发布到DockerHub仓库:githubwyj/sqlite-web,如果不放心就自己构建吧。。。
镜像食用
docker-compose.yaml
version: '3'
services:
sqlite-web:
restart: always
container_name: sqlite-web
hostname: sqlite-web
image: githubwyj/sqlite-web
ports:
- "8089:8080"
environment:
- TZ=Asia/Shanghai
- SQLITE_DATABASE=yourdb.db
volumes:
- /pathyourdb:/data
然后执行:
docker-compose up -d
时间查看
docker exec -it -u root sqlite-web date
容器的时间是正常的,但是发现,控制台查出的时间不对
额,这就尴尬了,不得行
评论区