日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Docker】日常记录

發布時間:2025/3/20 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Docker】日常记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • /var/lib/docker 目錄解釋
      • [Docker Volume - 目錄掛載以及文件共享](https://kebingzao.com/2019/02/25/docker-volume/#dockerfile-volume-%E7%9A%84%E6%9D%83%E9%99%90%E5%92%8C%E8%AE%B8%E5%8F%AF)
      • Docker-compose ports 與 Dockerfile EXPOSE 區別
      • docker 內“Temporary failure resolving 'security.ubuntu.com” 報錯信息
      • 查看各容器IP地址
      • 查看docker container logs size
      • 清理docker container logs
      • 如何更改 docker-compose 啟動的正在運行中的服務配置
      • Linux安裝docker-compose
      • 修改已運行的Docker容器啟動配置參數
        • 方法一:Docker 命令修改
        • 方法二:直接改配置文件
      • 修改docker container 的掛載路徑
      • 清理docker
        • 手動清理
        • 自動清理
      • 修改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 failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -j DNAT ...
        • failed to start daemon: Error initializing network controller: Error creating default "bridge" network: could not find an available, non-overlapping
      • iptables no chain/target/match by that name
      • root 進入docker 容器(加參數 -u root)

/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 Volume - 目錄掛載以及文件共享

Docker-compose ports 與 Dockerfile EXPOSE 區別

# ports:暴露容器端口到主機任意端口或指定端口,用法: # docker-compose.yml ports:- "80:80"- "91:81"# expose:將當前容器的端口暴露給同一個networks 的其他容器,用法:# docker-compose.yml expose: - '3000'- '9000'# Dockerfile EXPOSE "3000"

docker 內“Temporary failure resolving 'security.ubuntu.com” 報錯信息

解決方案: vim /etc/docker/daemon.json { "dns": ["8.8.8.8", "114.114.114.114"] } 重啟docker systemctl restart docker

查看各容器IP地址

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

查看docker container logs size

ls -lh $(find /var/lib/docker/containers/ -name *-json.log)

清理docker container logs

#!/bin/shecho "==================== start clean docker containers logs =========================="logs=$(find /var/lib/docker/containers/ -name *-json.log)for log in $logsdoecho "clean logs : $log"cat /dev/null > $logdoneecho "==================== 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

手動清理

刪除所有無用容器

docker ps -a | awk '{ print $1}' | wc -l 統計共有多少容器 docker rm $(docker ps -a | awk '{ print $1}' | tail -n -num) //刪除倒數num個容器如果無用的比較多,啟動所有有用的,再刪除,運行中的容器是不能被移除的1、刪除所有懸空鏡像,不刪除未使用鏡像: docker rmi $(docker images -f "dangling=true" -q) 2、刪除所有未使用鏡像和懸空鏡像 docker rmi $(docker images -q) 3、清理卷 如果卷占用空間過高,可以清除一些不使用的卷,包括一些未被任何容器調用的卷(-v 詳細信息中若顯示 LINKS = 0,則是未被調用): 刪除所有未被容器引用的卷: docker volume rm $(docker volume ls -qf dangling=true) 4、容器清理 如果發現是容器占用過高的空間,可以手動刪除一些: 刪除所有已退出的容器: docker rm -v $(docker ps -aq -f status=exited) 刪除所有狀態為dead的容器 docker rm -v $(docker ps -aq -f status=dead)

自動清理

docker system prune docker system prune -a : 一并清除所有未被使用的鏡像和懸空鏡像。 docker system prune -f : 用以強制刪除,不提示信息。

docker system prune可對空間進行自動清理。
該命令所清理的對象如下:

  • all stopped containers (已停止容器)
  • all networks not used by at least one container (未被任何容器所關聯的網絡)
  • all dangling images (未被任何容器使用的卷)
  • all dangling build cache (所有懸空的鏡像)

已使用的鏡像:指所有已被容器(包括stop的)關聯的鏡像,也就是docker ps -a所看到的所有容器對應的image。
未引用鏡像:沒有被分配或使用在容器中的鏡像
懸空鏡像(dangling image):未配置任何Tag(也就是無法被引用)的鏡像。通常是由于鏡像編譯過程中未指定-t參數配置Tag導致的。

docker image prune:刪除懸空的鏡像。docker container prune:刪除無用的容器。 - 默認情況下docker container prune命令會清理掉所有處于stopped狀態的容器 - 如果不想那么殘忍統統都刪掉,也可以使用--filter標志來篩選出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24內創建的除外: - $ docker container prune --filter "until=24h" docker volume prune:刪除無用的卷。 docker network prune:刪除無用的網絡

修改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 wwwdocker 解決方式:

其他命令


摘自: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

總結

以上是生活随笔為你收集整理的【Docker】日常记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。