文章目錄
- /var/lib/docker 目錄解釋
- 查看docker container logs size
- 清理docker container logs
- 如何更改 docker-compose 啓動的正在運行中的服務配置
- Linux安裝docker-compose
- 修改已運行的Docker容器啓動配置參數
- 修改docker container 的掛載路徑
- 刪除所有無用容器
- 修改docker默認的存儲位置
- Docker mysql 導出、導入數據
- [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf
- 其他命令
- docker: Error response from daemon: oci runtime error: container_linux.go:265: starting container process caused "exec: \"prom/pushgateway\": stat prom/pushgateway: no such file or directory".
- docker ps 完整輸出
- docker: Error response from daemon: conflicting options: port publishing and the container type network mode.
- docker: Error response from daemon: driver failed programming external connectivity on endpoint nginx (d639abcca455cfb2ae23110a56b08732522da0cb64146f7141ca99a8c54704b7): Error starting userland proxy: listen tcp 0.0.0.0:80: listen: address already in use.
- Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 運行容器之後,一直處於restarting 狀態
- docker 服務啓動失敗
- iptables no chain/target/match by that name
/var/lib/docker 目錄解釋
* /var/lib/docker/devicemapper/devicemapper/data
* 用來存儲相關的存儲池數據
* /var/lib/docker/devicemapper/devicemapper/metadata
* 用來存儲相關的元數據。
* /var/lib/docker/devicemapper/metadata/
* 用來存儲 device_id、大小、以及傳輸_id、初始化信息
* /var/lib/docker/devicemapper/mnt
* 用來存儲掛載信息
* /var/lib/docker/container/
* 用來存儲容器信息
* /var/lib/docker/graph/
* 用來存儲鏡像中間件及本身詳細信息和大小 、以及依賴信息
* /var/lib/docker/repositores-devicemapper
* 用來存儲鏡像基本信息
* /var/lib/docker/tmp
* docker臨時目錄
* /var/lib/docker/trust
* docker信任目錄
* /var/lib/docker/volumes
* docker卷目錄
查看docker container logs size
ls -lh $(find /var/lib/docker/containers/ -name *-json.log)
清理docker container logs
#!/bin/sh
echo "==================== start clean docker containers logs =========================="
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
echo "==================== end clean docker containers logs =========================="
如何更改 docker-compose 啓動的正在運行中的服務配置
docker-compose up -d
Linux安裝docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
修改已運行的Docker容器啓動配置參數
我們創建容器時忘了添加參數 --restart=always ,當 Docker 重啓時,容器未能自動啓動
方法一:Docker 命令修改
docker container update --restart=always 容器名字
方法二:直接改配置文件
-
首先停止容器,不然無法修改配置文件
-
配置文件路徑爲:
/var/lib/docker/containers/容器ID
在該目錄下找到一個文件
hostconfig.json
,找到該文件中關鍵字 RestartPolicy修改前配置:
“RestartPolicy”:{“Name”:“no”,“MaximumRetryCount”:0}
修改後配置:
“RestartPolicy”:{“Name”:“always”,“MaximumRetryCount”:0}
-
最後啓動容器。
修改docker container 的掛載路徑
1、停止docker服務
systemctl stop docker.service(關鍵,修改之前必須停止docker服務)
2、vim /var/lib/docker/containers/container-ID/hostconfig.json
“Binds”:["/home/website:/usr/share/nginx/website"]
2、vim /var/lib/docker/containers/container-ID/config.v2.json
- 修改配置文件中的目錄位置,然後保存退出
- 大致格式如下:
“MountPoints”:{
“容器內文件路徑”:{“Source”:“宿主機文件路徑”,“Destination”:“容器內文件路徑”,“RW”:true,“Name”:"",“Driver”:"",“Type”:“bind”,“Relabel”:“rw”,“Propagation”:“rprivate”,“Spec”:{“Type”:“bind”,“Source”:"宿主機文件路徑,“Target”:“容器內文件路徑”}}
}
- 示例:
-v /home/website:/usr/share/nginx/website
“MountPoints”:{
“/usr/share/nginx/website”:{“Source”:"/home/website",“Destination”:"/usr/share/nginx/website",“RW”:true,“Name”:"",“Driver”:"",“Type”:“bind”,“Relabel”:“rw”,“Propagation”:“rprivate”,“Spec”:{“Type”:“bind”,“Source”:"/home/website",“Target”:"/usr/share/nginx/website"}}
}
3、啓動docker服務
systemctl start docker.service
4、啓動docker容器
docker start <container-name/ID>
摘自:https://blog.csdn.net/zedelei/article/details/90208183
刪除所有無用容器
docker ps -a | awk '{ print $1}' | wc -l 統計共有多少容器
docker rm $(docker ps -a | awk '{ print $1}' | tail -n -num) //刪除倒數num個容器
如果無用的比較多,啓動所有有用的,再刪除,運行中的容器是不能被移除的
修改docker默認的存儲位置
摘自:https://blog.csdn.net/qq_35119422/article/details/85869361
docker 的所有images及相關信息存儲位置爲:/var/lib/docker
查看默認的docker存儲路徑
docker info |grep ‘Docker Root Dir’
WARNING: No swap limit support
Docker Root Dir: /var/lib/docker
停止所有docker容器
sudo docker stop $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
停止docker服務
sudo service docker stop
打包docker目錄
cd /var/lib
sudo tar -czvf /usr/docker.tar.gz docker/
cd /usr/
sudo tar -xzvf docker.tar.gz
修改docker默認的存儲位置
sudo vim /etc/docker/daemon.json
{
“graph”: “/home/server/docker”
}
啓動docker服務
sudo service docker start
啓動所有docker容器
sudo docker start $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
查看修改後docker存儲路徑
docker info |grep ‘Docker Root Dir’
WARNING: No swap limit support
Docker Root Dir: /usr/docker
Docker mysql 導出、導入數據
// 導出數據和表結構:
# docker exec -i mysql mysqldump -uroot -p12345678 db > db.sql
// 導出表結構:
# docker exec -i mysql mysqldump -uroot -p12345678 -d db > db.sql
// 導入
# scp db.sql root@<ip地址>:/tmp/db.sql
# docker cp db.sql mysql_container:/opt/ms.sql
# docker exec -it mysql_container bash
> mysql -uroot -p12345678
> create database db;
> use db;
> source <路徑>/db.sql;
[emerg] getpwnam(“www”) failed in /etc/nginx/nginx.conf
root@xxx:/home/xxx# docker logs nginx
nginx: [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:6
本地解決方法:
useradd www
groupadd www
docker 解決方式:
其他命令
摘自:https://blog.csdn.net/qq_35119422/article/details/85869361
停止所有docker容器
sudo docker stop $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
停止docker服務
sudo service docker stop
修改mysql路徑
cd ~
sudo cp -r mysql/ /home/server/
備份容器配置文件
cd /var/lib/docker/containers/de9c6501cdd3
cp hostconfig.json hostconfig.json.bak
cp config.v2.json config.v2.json.bak
修改hostconfig的冒號前的配置路徑
vi hostconfig.json
“Binds”: ["/home/server/mysql/conf/my.cnf:/etc/mysql/my.cnf", “/home/server/mysql/logs:/logs”, “/home/server/mysql/data:/mysql_data”],
修改config的Source的配置路徑
vi config.v2.json
啓動docker服務
sudo service docker start
啓動所有docker容器
sudo docker start $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
docker: Error response from daemon: oci runtime error: container_linux.go:265: starting container process caused “exec: “prom/pushgateway”: stat prom/pushgateway: no such file or directory”.
xxxx@debian:~/docker_package$ sudo docker run -d --name pushgateway -p 9091:9091 --network=prometheus_net test_pushgateway prom/pushgateway
[sudo] password for xxxx:
a6e9041545eb1208af80de45a60b1b8b627d0c51036d20dd781c968b3a7b5566
docker: Error response from daemon: oci runtime error: container_linux.go:265: starting container process caused “exec: “prom/pushgateway”: stat prom/pushgateway: no such file or directory”.
解決方式:
因爲commad 方式錯誤
那麼進程爲什麼會退出?
如果是執行 service nginx start 這類啓動後臺服務程序的命令,那說明還是把 Docker 當做虛擬機了。Docker 啓動的是進程,因此所謂的後臺服務應該放到前臺,比如應該 nginx -g ‘daemon off;’ 這樣直接前臺啓動應用纔對。
如果發現 COMMAND 一欄是 /bin/bash,那還是說明把 Docker 當虛擬機了。COMMAND 應該是應用程序,而不交互式操作界面,容器不需要交互式操作界面。此外,如果使用 /bin/bash 希望起一個交互式的界面,那麼也必須提供給其輸入和終端,因此必須加 -it 選項,比如 docker run -it ubuntu /bin/bash
那麼如何查看使用的是什麼commad 啓動方式呢?
docker inspect <容器名稱> 查看Cmd
或
docker ps -a
進入容器find / |grep <你看到COMMAND的部分命令>
或
進入容器 ps -fe ,但是我們沒有成功,容器內沒有ps 命令
解決問題:
查看完整輸出:docker ps --no-trunc
docker ps 完整輸出
關於 command 顯示不全問題
顯示完整輸出
docker ps --no-trunc
docker: Error response from daemon: conflicting options: port publishing and the container type network mode.
See ‘docker run --help’.
xxxx@debian:~$ sudo docker run -d
–name=mysql
-p 3306:3306
–network=container:nginx
-v /home/xxxx/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=xxxxx
-e TZ=Asia/Shanghai
test_mysql
/docker-entrypoint-initdb.d
docker: Error response from daemon: conflicting options: port publishing and the container type network mode.
See ‘docker run --help’.
衝突的選項:端口發佈和容器類型網絡模式
解決:
刪除-p 3306:3306
docker: Error response from daemon: driver failed programming external connectivity on endpoint nginx (d639abcca455cfb2ae23110a56b08732522da0cb64146f7141ca99a8c54704b7): Error starting userland proxy: listen tcp 0.0.0.0:80: listen: address already in use.
解決:
netstat -tlnp
查看佔用的端口
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
解決方案:
查看/etc/docker/daemon.json 這個文件中的 用 {} 括起來
運行容器之後,一直處於restarting 狀態
查看日誌
docker logs <容器名稱>
可能存在以下問題:
1. 缺少執行文件
2. 執行文件中語法錯誤
docker 服務啓動失敗
iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -j DNAT …
解決方案:
cd /etc/systemd/system/multi-user.target.wants
vim docker.service
去掉 After中 的firewalld.service
重啓docker:
systemctl daemon-loaded
systemctl start docker
failed to start daemon: Error initializing network controller: Error creating default “bridge” network: could not find an available, non-overlapping
解決方案:
vim /etc/docker/daemon.json
{
"ipv6": false
}
iptables no chain/target/match by that name
docker-compose up -d
之後報錯 iptables no chain/target/match by that name
查看 iptables-save|grep docker
發現沒有了 docker相關配置,
於是,重啓docker服務 systemctl restart docker
自動生成 iptables 配置信息
再次執行
docker-compose up -d
問題解決!!!
root 進入docker 容器(加參數 -u root)
docker exec -it -u root <容器名> bash