Docker 常用命令與操作

[TOC]

介紹

此命令集合版本為 1.11.1 及以上

基礎(chǔ)類(lèi)

查看docker信息

# 查看docker版本
docker version
# 顯示docker系統(tǒng)的信息
docker info
# 日志信息
docker logs
# 故障檢查
service docker status
# 啟動(dòng)關(guān)閉docker
sudo service docker start|stop

日志類(lèi)

查看容器日志

docker logs -f <容器名orID>

docker daemon 日志位置

也稱(chēng)之為 引擎日志 根據(jù)系統(tǒng)不同各不相同

* CoreOS - journalctl -u docker.service
* Ubuntu(16.04) - journalctl -u docker.service
* Ubuntu(14.04) - /var/log/upstart/docker.log
* Boot2Docker - /var/log/docker.log
* Debian GNU/Linux 8 - journalctl -u docker.service
* Debian GNU/Linux 7 - /var/log/daemon.log
* CentOS 7/RHEL 7 - journalctl -u docker.service
* CentOS - /var/log/daemon.log | grep docker
* Fedora - journalctl -u docker.service
* OpenSuSE - journalctl -u docker.service
* Red Hat Enterprise Linux Server - /var/log/messages | grep docker
* OSX - ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log/d?ocker.log

journalctl 日志工具使用

# 最后行數(shù)的日志
journalctl -n
# 詳細(xì)信息
journalctl -f
# 本次啟動(dòng)后的所有日志
journalctl -b
# 查看啟動(dòng)記錄
journalctl --list-boots
# 查看某次運(yùn)行過(guò)程中的日志
sudo journalctl -b [啟動(dòng)順序號(hào)差牛,或者啟動(dòng)hash]
# 查看記錄中指定單元 docker.service 的日志
journalctl -u docker.service
  • 顯示可以匹配日志級(jí)別

journalctl -F PRIORITY

編碼 優(yōu)先級(jí) 嚴(yán)重性
0 emerg 系統(tǒng)不可用
1 alert 必須立即采取措施
2 crit 嚴(yán)重狀況
3 err 非嚴(yán)重錯(cuò)誤狀況
4 warning 警告狀況
5 notice 正常但重要的事件
6 info 信息性事件
7 debug 調(diào)試級(jí)別消息

比如顯示 docker 內(nèi)核日志中 info 類(lèi)的數(shù)據(jù)

# 只顯示錯(cuò)誤、沖突和重要告警信息
journalctl -u docker.service -p err..alert
# -p 等效于 PRIORITY 也可以用數(shù)字來(lái)表示
journalctl -u docker.service PRIORITY=6
# 還可以加入 MESSAGE堰乔、MESSAGE_ID偏化、_PID、_UID镐侯、_HOSTNAME侦讨、_SYSTEMD_UNIT 等條件
# 查詢(xún)字段 `man 7 systemd.journal-fields`
# 例如查詢(xún) info 信息,PID 為 2331
journalctl -u docker.service PRIORITY=6 _PID=2331

journalctl 日志保存到文件

systemd-journald 服務(wù)收集到的日志默認(rèn)保存在 /run/log 目錄中,重啟系統(tǒng)會(huì)丟掉以前的日志信息

  • 保存日志到默認(rèn)配置目錄

創(chuàng)建目錄 /var/log/journal 韵卤,當(dāng)這個(gè)目錄存在骗污,則日志會(huì)持久化,記得創(chuàng)建后沈条,重啟 systemd-journald.service 服務(wù)

sudo mkdir /var/log/journal
sudo chown root:systemd-journal /var/log/journal
sudo chmod 2775 /var/log/journal
sudo systemctl restart systemd-journald.service
  • 或者修改配置

修改 /etc/systemd/journald.conf需忿,把取消注釋 Storage=auto, 并改為 Storage=persistent
重啟 systemd-journald.service 服務(wù)

  • 查看日志占用的磁盤(pán)空間
sudo journalctl --disk-usage

容量定義文件在 /etc/systemd/journald.conf
日志調(diào)整文件 /etc/logrotate.conf

日志系統(tǒng)同樣會(huì)進(jìn)行輪轉(zhuǎn),每月觸發(fā)蜡歹。默認(rèn)情況下贴谎,日志大小不能超過(guò)所處文件系統(tǒng)的10%,也不可使所處文件系統(tǒng)空間低于15%

無(wú)論是否設(shè)置把日志存儲(chǔ)到文件季稳,都會(huì)得到 disk-usage 的占用空間擅这!

  • 清理日志數(shù)據(jù)
#使用 –vacuum-size 選項(xiàng)指定日志的總體體積
sudo journalctl --vacuum-size=1G
使用 –vacuum-time 選項(xiàng)指定日志的總時(shí)間占用
sudo journalctl --vacuum-time=1years

更多詳細(xì)見(jiàn) http://www.cnblogs.com/sparkdev/p/8795141.html

docker ps 沒(méi)有響應(yīng) 日志查詢(xún)

# grep 所有容器的config.json
docker logs [conID]
# 確認(rèn)問(wèn)題后
# 該config.json 中有該容器1號(hào)進(jìn)程的pid
kill -9 pid

容器類(lèi)

docker容器可以理解為在沙盒中運(yùn)行的進(jìn)程

這個(gè)沙盒包含了該進(jìn)程運(yùn)行所必須的資源,包括文件系統(tǒng)景鼠、系統(tǒng)類(lèi)庫(kù)仲翎、shell 環(huán)境等等。但這個(gè)沙盒默認(rèn)是不會(huì)運(yùn)行任何程序的铛漓。你需要在沙盒中運(yùn)行一個(gè)進(jìn)程來(lái)啟動(dòng)某一個(gè)容器溯香。這個(gè)進(jìn)程是該容器的唯一進(jìn)程,所以當(dāng)該進(jìn)程結(jié)束的時(shí)候浓恶,容器也會(huì)完全的停止玫坛。

查看容器信息

# 查看當(dāng)前運(yùn)行的容器
docker ps
# 查看全部容器
docker ps -a
# 查看全部容器的id和信息
docker ps -a -q
# 查看全部容器占用的空間
docker ps -as
# 查看一個(gè)正在運(yùn)行容器進(jìn)程,支持 ps 命令參數(shù)
docker top
# 查看容器的示例id
sudo docker inspect -f  '{{.Id}}' [id]
# 檢查鏡像或者容器的參數(shù)包晰,默認(rèn)返回 JSON 格式
docker inspect
# 返回 ubuntu:14.04  鏡像的 docker 版本
docker inspect --format '{{.DockerVersion}}' ubuntu:14.04
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ubuntu:14.04

容器同步命令

# 保存對(duì)容器的修改
docker commit
# 保存某個(gè)容器成為一個(gè)鏡像
docker commit -a "user" -m "commit info" [CONTAINER] [imageName]:[imageTag]
# 推送一個(gè)容器到中心倉(cāng)庫(kù)
docker login --username=[userName] --password=[pwd] [registryURL]
## 建議登錄后查看 docker info
docker tag [imageID] [remoteURL]:[imageTag]
docker push [remoteURL]:[imageTag]
# 拉取提交的容器
docker pull [remoteURL]:[imageTag]
# 對(duì)比容器的改動(dòng)
docker diff
# 附加到一個(gè)運(yùn)行的容器上
docker attach

容器操作命令

創(chuàng)建刪除容器

# 創(chuàng)建一個(gè)容器命名為 test 使用鏡像daocloud.io/library/ubuntu
docker create -it --name test daocloud.io/library/ubuntu
# 創(chuàng)建并啟動(dòng)一個(gè)容器 名為 test 使用鏡像daocloud.io/library/ubuntu
docker run --name test daocloud.io/library/ubuntu
# 刪除一個(gè)容器
docker rm [容器id]
# 刪除所有容器
docker rm `docker ps -a -q`
# 根據(jù)Dockerfile 構(gòu)建
docker build -t [image_name] [Dockerfile_path]

docker容器隨系統(tǒng)自啟

docker run --restart=always
  • no – 默認(rèn)值湿镀,如果容器掛掉不自動(dòng)重啟
  • on-failure – 當(dāng)容器以非 0 碼退出時(shí)重啟容器,同時(shí)可接受一個(gè)可選的最大重啟次數(shù)參數(shù) (e.g. on-failure:10).
  • always – 不管退出碼是多少都要重啟

容器資源限制參數(shù)

# 限制內(nèi)存最大使用
-m 1024m --memory-swap=1024m
# 限制容器使用CPU
--cpuset-cpus="0,1"

把一個(gè)正在運(yùn)行的容器保存為鏡像

docker commit <CONTAIN-ID> <IMAGE-NAME>

啟動(dòng)停止容器等操作

docker start|stop|restart [id]
# 暫停|恢復(fù) 某一容器的所有進(jìn)程
docker pause|unpause [id]
# 殺死一個(gè)或多個(gè)指定容器進(jìn)程
docker kill -s KILL [id]
# 停止全部運(yùn)行的容器
docker stop `docker ps -q`
# 殺掉全部運(yùn)行的容器
docker kill -s KILL `docker ps -q`

交互式進(jìn)入容器

sudo docker exec -it {{containerName or containerID}} bash
sudo docker exec -i {{containerName or containerID}} bash
sudo docker exec -t {{containerName or containerID}} bash
sudo docker exec -d {{containerName or containerID}} bash
  • 只用 -i 參數(shù),由于沒(méi)有分配偽終端伐憾,看起來(lái)像pipe執(zhí)行一樣勉痴。但是執(zhí)行結(jié)果、命令返回值都可以正確獲取
  • 只用 -t 參數(shù)树肃,則可以看到一個(gè) console 窗口蒸矛,但是執(zhí)行命令會(huì)發(fā)現(xiàn)由于沒(méi)有獲得stdin的輸出,無(wú)法看到命令執(zhí)行情況
  • 使用 -it 時(shí)胸嘴,則和我們平常操作 console 界面類(lèi)似雏掠,而且也不會(huì)像attach方式因?yàn)橥顺觯瑢?dǎo)致整個(gè)容器退出
  • 使用 -d 參數(shù)劣像,在后臺(tái)執(zhí)行一個(gè)進(jìn)程乡话。如果一個(gè)命令需要長(zhǎng)時(shí)間進(jìn)程,會(huì)很快返回

Docker attach

Docker attach可以attach到一個(gè)已經(jīng)運(yùn)行的容器的stdin驾讲,然后進(jìn)行命令執(zhí)行的動(dòng)作

docker attach {{containerName or containerID}}

需要注意的是蚊伞,如果從這個(gè)stdin中exit,會(huì)導(dǎo)致容器的停止

查看容器的root用戶(hù)密碼

docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1

因?yàn)镈ocker容器啟動(dòng)時(shí)的root用戶(hù)的密碼是隨機(jī)分配的吮铭。所以时迫,通過(guò)這種方式就可以得到容器的root用戶(hù)的密碼

容器于宿主拷貝文件

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
# 本地文件上傳到對(duì)應(yīng)容器的目錄
docker cp local.sh [CONTAINERid]:[TagPath]

此命令為高版本docker才有,當(dāng)然1.11+肯定包含

運(yùn)行一個(gè)新容器谓晌,同時(shí)為它命名掠拳、端口映射、文件夾映射

redmine鏡像為例

docker run --name redmine -p 9003:80 -p 9023:22 -d -v /var/redmine/files:/redmine/files -v /var/redmine/mysql:/var/lib/mysql sameersbn/redmine

一個(gè)容器連接到另一個(gè)容器

docker run -i -t --name sonar -d -link mmysql:db  tpires/sonar-server sonar

導(dǎo)入導(dǎo)出容器

# 支持遠(yuǎn)程文件 .tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz
docker import
# 導(dǎo)出
docker export [id] >~/Downloads/ubuntu_nexus.tar

導(dǎo)出后導(dǎo)入(exported-imported))的容器會(huì)丟失所有的提交歷史纸肉,無(wú)法回滾溺欧。

鏡像操作

遠(yuǎn)程鏡像

docker login
docker search
# 搜索處收藏?cái)?shù)不小于 3 ,并且能夠自動(dòng)化構(gòu)建的  django 鏡像柏肪,并且完整顯示鏡像描述
docker search -s 3 --automated --no-trunc django
docker pull
# 拉取ubuntu最新的鏡像
docker pull ubuntu:latest
# 服務(wù)器拉取個(gè)人動(dòng)態(tài)姐刁,可選擇時(shí)間區(qū)間
docker events
# 拉取個(gè)人從 2015/07/20 到 2015/08/08 的個(gè)人動(dòng)態(tài)
docker events --since="20150720" --until="20150808"

鏡像同步操作

# 標(biāo)記本地鏡像,將其歸入某一倉(cāng)庫(kù)
docker tag
# 將 ID 為 5db5f84x1261 的容器標(biāo)記為 mine/lnmp:0.2 鏡像
docker tag 5db5f84x1261 mine/lnmp:0.2
# 將鏡像推送至遠(yuǎn)程倉(cāng)庫(kù)烦味,默認(rèn)為 Docker Hub
docker push

本地鏡像

# 列出本地所有鏡像
docker images
# 本地鏡像名為 ubuntu 的所有鏡像
docker images ubuntu
# 查看指定鏡像的創(chuàng)建歷史
docker history [id]
# 本地移除一個(gè)或多個(gè)指定的鏡像
docker rmi
# 移除本地全部鏡像
docker rmi `docker images -a -q`
# 指定鏡像保存成 tar 歸檔文件聂使, docker load 的逆操作
docker save
# 將鏡像 ubuntu:14.04 保存為 ubuntu14.04.tar 文件
docker save -o ubuntu14.04.tar ubuntu:14.04
# 從 tar 鏡像歸檔中載入鏡像, docker save 的逆操作
docker load
# 上面命令的意思是將 ubuntu14.04.tar 文件載入鏡像中
docker load -i ubuntu14.04.tar
docker load < /home/save.tar
# 構(gòu)建自己的鏡像
docker build -t <鏡像名> <Dockerfile路徑>
docker build -t xx/gitlab .

保存后再加載(saved-loaded)的鏡像不會(huì)丟失提交歷史和層谬俄,可以回滾

重新查看container的stdout

# 啟動(dòng)top命令柏靶,后臺(tái)運(yùn)行
$ ID=$(sudo docker run -d ubuntu /usr/bin/top -b)
# 獲取正在running的container的輸出
$ sudo docker attach $ID
top - 02:05:52 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
Tasks:  1 total,  1 running,  0 sleeping,  0 stopped,  0 zombie
Cpu(s):  0.1%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    373572k total,  355560k used,    18012k free,    27872k buffers
Swap:  786428k total,        0k used,  786428k free,  221740k cached
^C$
$ sudo docker stop $ID

docker run

后臺(tái)運(yùn)行(-d)、并暴露端口

docker run -d -p 127.0.0.1:33301:22 centos6-ssh

run 命令詳解

-a, --attach=[]            Attach to STDIN, STDOUT or STDERR 指定標(biāo)準(zhǔn)輸入輸出內(nèi)容類(lèi)型溃论,可選 STDIN/STDOUT/STDERR 三項(xiàng)
  --add-host=[]              Add a custom host-to-IP mapping (host:ip)
  --blkio-weight=0            Block IO (relative weight), between 10 and 1000
  -c, --cpu-shares=0          CPU shares (relative weight)
  --cap-add=[]                Add Linux capabilities
  --cap-drop=[]              Drop Linux capabilities
  --cgroup-parent=            Optional parent cgroup for the container
  --cidfile=                  Write the container ID to the file
  --cpu-period=0              Limit CPU CFS (Completely Fair Scheduler) period
  --cpu-quota=0              Limit the CPU CFS quota
  --cpuset-cpus=              CPUs in which to allow execution (0-3, 0,1) 綁定容器到指定CPU運(yùn)行
  --cpuset-mems=              MEMs in which to allow execution (0-3, 0,1) 綁定容器到指定MEM運(yùn)行
  -d, --detach=false          Run container in background and print container ID 后臺(tái)運(yùn)行容器屎蜓,并返回容器ID
  --device=[]                Add a host device to the container
  --dns=[]                    Set custom DNS servers 指定容器使用的DNS服務(wù)器,默認(rèn)和宿主一致
  --dns-search=[]            Set custom DNS search domains 指定容器DNS搜索域名钥勋,默認(rèn)和宿主一致
  -e, --env=[]                Set environment variables 設(shè)置環(huán)境變量
  --entrypoint=              Overwrite the default ENTRYPOINT of the image
  --env-file=[]              Read in a file of environment variables 從指定文件讀入環(huán)境變量
  --expose=[]                Expose a port or a range of ports
  -h, --hostname=            Container host name 指定容器的hostname
  --help=false                Print usage
  -i, --interactive=false    Keep STDIN open even if not attached 以交互模式運(yùn)行容器炬转,通常與 -t 同時(shí)使用
  --ipc=                      IPC namespace to use
  -l, --label=[]              Set meta data on a container
  --label-file=[]            Read in a line delimited file of labels
  --link=[]                  Add link to another container
  --log-driver=              Logging driver for container
  --log-opt=[]                Log driver options
  --lxc-conf=[]              Add custom lxc options
  -m, --memory=              Memory limit
  --mac-address=              Container MAC address (e.g. 92:d0:c6:0a:29:33)
  --memory-swap=              Total memory (memory + swap), '-1' to disable swap
  --name=                    Assign a name to the container 為容器指定一個(gè)名稱(chēng)
  --net=bridge                Set the Network mode for the container  指定容器的網(wǎng)絡(luò)連接類(lèi)型,支持 bridge/host/none/container:<name|id> 四種類(lèi)型
  --oom-kill-disable=false    Disable OOM Killer
  -P, --publish-all=false    Publish all exposed ports to random ports
  -p, --publish=[]            Publish a container's port(s) to the host
  --pid=                      PID namespace to use
  --privileged=false          Give extended privileges to this container
  --read-only=false          Mount the container's root filesystem as read only
  --restart=no                Restart policy to apply when a container exits
  --rm=false                  Automatically remove the container when it exits
  --security-opt=[]          Security Options
  --sig-proxy=true            Proxy received signals to the process
  -t, --tty=false            Allocate a pseudo-TTY 為容器重新分配一個(gè)偽輸入終端算灸,通常與 -i 同時(shí)使用
  -u, --user=                Username or UID (format: <name|uid>[:<group|gid>])
  --ulimit=[]                Ulimit options
  --uts=                      UTS namespace to use
  -v, --volume=[]            Bind mount a volume
  --volumes-from=[]          Mount volumes from the specified container(s)
  -w, --workdir=              Working directory inside the container

存在的問(wèn)題解決方法

去除每次sudo運(yùn)行docker命令返吻,需要添加組

# Add the docker group if it doesn't already exist.
$ sudo groupadd docker
#改完后需要重新登陸用戶(hù)
$ sudo gpasswd -a ${USER} docker

Dockerfile中的EXPOSE、docker run --expose乎婿、docker run -p之間的區(qū)別

  • Dockerfile的EXPOSE相當(dāng)于docker run --expose测僵,提供container之間的端口訪問(wèn)
  • docker run -p允許container外部主機(jī)訪問(wèn)container的端口

注意

ubuntu14 的 febootstrap沒(méi)有 -i 命令

ubuntu14下的docker是沒(méi)有service服務(wù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谢翎,隨后出現(xiàn)的幾起案子捍靠,更是在濱河造成了極大的恐慌,老刑警劉巖森逮,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榨婆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡褒侧,警方通過(guò)查閱死者的電腦和手機(jī)良风,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)谊迄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人烟央,你說(shuō)我怎么就攤上這事统诺。” “怎么了疑俭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵粮呢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我钞艇,道長(zhǎng)啄寡,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任哩照,我火速辦了婚禮挺物,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘飘弧。我一直安慰自己狐树,他們只是感情好掀淘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般惰匙。 火紅的嫁衣襯著肌膚如雪闹究。 梳的紋絲不亂的頭發(fā)上磅摹,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天鳞疲,我揣著相機(jī)與錄音,去河邊找鬼版确。 笑死扣囊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绒疗。 我是一名探鬼主播侵歇,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吓蘑!你這毒婦竟也來(lái)了惕虑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤磨镶,失蹤者是張志新(化名)和其女友劉穎溃蔫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體琳猫,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伟叛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脐嫂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片统刮。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡紊遵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出侥蒙,到底是詐尸還是另有隱情暗膜,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布辉哥,位于F島的核電站桦山,受9級(jí)特大地震影響攒射,放射性物質(zhì)發(fā)生泄漏醋旦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一会放、第九天 我趴在偏房一處隱蔽的房頂上張望饲齐。 院中可真熱鬧,春花似錦咧最、人聲如沸捂人。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)滥搭。三九已至,卻和暖如春捣鲸,著一層夾襖步出監(jiān)牢的瞬間瑟匆,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工栽惶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愁溜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓外厂,卻偏偏與公主長(zhǎng)得像冕象,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子汁蝶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容