[Docker]デイリーレコード

記事ディレクトリ

/ 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ボリューム-ディレクトリのマウントとファイル共有

Docker-composeポートとDockerfileEXPOSEの違い

#  ports:暴露容器端口到主机任意端口或指定端口,用法:
# docker-compose.yml
ports:
  - "80:80"
  - "91:81"

# expose:将当前容器的端口暴露给同一个networks 的其他容器,用法:

# docker-compose.yml
expose: 
  - '3000'
  - '9000'

# Dockerfile
EXPOSE "3000"

Dockerでの「 '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コンテナのログサイズを表示する

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

Dockerコンテナのログをクリーンアップします

#!/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を再起動すると、コンテナは自動的に起動しません。

方法1:Dockerコマンドの変更

docker container update --restart=always 容器名字

方法2:構成ファイルを直接変更する

  • 最初にコンテナを停止します。そうしないと、構成ファイルを変更できません。

  • 構成ファイルのパスは次のとおりです。/var/lib/docker/containers/容器ID

    このディレクトリでファイルを見つけ、ファイルでhostconfig.jsonキーワードRestartPolicyを見つけます

    変更前の構成:“RestartPolicy”:{“Name”:“no”,“MaximumRetryCount”:0}

    変更後の構成:“RestartPolicy”:{“Name”:“always”,“MaximumRetryCount”:0}

  • 最後にコンテナを起動します。

Dockerコンテナのマウントパスを変更する

1.Dockerサービスを停止します

systemctl stop docker.service(关键,修改之前必须停止docker服务)

2、vim /var/lib/docker/containers/container-ID/hostconfig.json

「バインド」:["/ home / website:/ usr / share / nginx / website"]

2、vim /var/lib/docker/containers/container-ID/config.v2.json

  • 構成ファイル内のディレクトリの場所を変更し、保存して終了します
  • 一般的な形式は次のとおりです。

"MountPoints":{ "コンテナ内のファイルパス":{"ソース": "ホストファイルパス"、 "宛先": "コンテナ内のファイルパス"、 "RW":true、 "名前": ""、 "ドライバ" : ""、 "Type": "bind"、 "Relabel": "rw"、 "Propagation": "rprivate"、 "Spec":{"Type": "bind"、 "Source": "Host file Path、 "Target": "コンテナ内のファイルパス"}} }

  • 例:-v /home/website:/usr/share/nginx/website

“ mountPoints”:{ “ / usr / share / nginx / website”:{“ Source”: "/ home / website"、“ Destination”: "/ usr / share / nginx / website"、“ RW”:true、“名前」: ""、 "ドライバー": ""、 "タイプ": "バインド"、 "再ラベル付け": "rw"、 "伝播": "rprivate"、 "仕様":{"タイプ": "バインド"、 「ソース」: "/ home / website"、 "ターゲット": "/ 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个容器

如果无用的比较多,启动所有有用的,再删除,运行中的容器是不能被移除的

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スペースは自動的にクリーンアップできます。
このコマンドでクリーンアップされるオブジェクトは次のとおりです。

  • 停止したすべてのコンテナ
  • 少なくとも1つのコンテナで使用されていないすべてのネットワーク(どのコンテナにも関連付けられていないネットワーク)
  • すべてのぶら下がっている画像(どのコンテナでも使用されていないボリューム)
  • すべてのぶら下がりビルドキャッシュ(すべてのぶら下がりイメージ)

使用済みイメージ:コンテナー(停止を含む)に関連付けられているすべてのイメージ、つまり、docker ps-aによって表示されるすべてのコンテナーに対応するイメージを指します。参照
されていない
イメージ:コンテナーで割り当てまたは使用されていないイメージ。ぶら下がっているイメージ:タグが構成されていない(つまり、参照できない)イメージ。これは通常、イメージのコンパイルプロセス中にタグを構成するために-tパラメーターを指定しないことが原因で発生します。

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のすべての画像と関連情報の保存場所は次のとおりです。/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

Dockermysqlのエクスポートおよびインポートデータ

// 导出数据和表结构:
# 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”)が/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のソース構成パスを変更します

vi config.v2.json

Dockerサービスを開始します

sudo service docker start

すべてのDockerコンテナを起動します

sudo docker start $(docker ps -a | awk{
     
      print $1}| tail -n +2)

docker:デーモンからのエラー応答:ociランタイムエラー:container_linux.go:265:コンテナプロセスを開始すると、「exec:“ prom / pushgateway”:stat prom / pushgateway:no such file ordirectory」が発生しました。

XXXX @のdebian:〜/ docker_package $ sudoをドッキングウィンドウ-d --name pushgateway -p 9091実行:9091 --network = prometheus_net test_pushgatewayプロム/ pushgateway
xxxxのための[須藤]パスワード:
a6e9041545eb1208af80de45a60b1b8b627d0c51036d20dd781c968b3a7b5566
ドッキングウィンドウ:デーモンからのエラー応答:OCIランタイムエラー: container_linux.go:265:コンテナープロセスを開始すると、「exec:“ prom / pushgateway”:stat prom / pushgateway:no such file ordirectory」が発生しました。

解決策:
commadメソッドが間違っているため、
プロセスが終了するのはなぜですか?
service nginx startなどのコマンドを実行してバックグラウンドサービスプログラムを開始すると、Dockerは引き続き仮想マシンと見なされます。Dockerはプロセスを開始するため、いわゆるバックグラウンドサービスをフォアグラウンドに配置する必要があります。たとえば、nginx -g'daemon off; 'を使用して、アプリケーションをフォアグラウンドで直接起動する必要があります。
COMMAND列が/ bin / bashであることがわかった場合でも、Dockerが仮想マシンとして使用されていることを意味します。COMMANDは、対話型操作インターフェースではなくアプリケーションである必要があり、コンテナーは対話型操作インターフェースを必要としません。さらに、/ bin / bashを使用してインタラクティブなインターフェイスを使用する場合は、入力とターミナルも提供する必要があるため、docker run -it ubuntu / bin / bashなどの-itオプションを追加する必要があります。

では、どのコンマ起動方法が使用されているかを確認する方法は?
ドッキングウィンドウが表示Cmdを<コンテナ名>を調べ
たり
ドッキングウィンドウのps -a
grepの<あなたがCOMMANDのコマンドの一部を見る> |コンテナの検索を入力/
または
コンテナのps -feを入力して、私たちは成功しなかった、にはpsコマンドはありませんがコンテナ

問題を解決します:
完全な出力を表示します:docker ps --no-trunc

dockerps完全出力

关于 command 显示不全问题
显示完整输出
docker ps --no-trunc 

docker:デーモンからのエラー応答:競合するオプション:ポートの公開とコンテナータイプのネットワークモード。

'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
:デーモンからのエラー応答:競合するオプション:ポート公開とコンテナタイプのネットワークモード。
「dockerrun--help」を参照してください。
競合するオプション:ポート公開とコンテナタイプネットワークモード
解決策:
delete -p 3306:3306

docker:デーモンからのエラー応答:ドライバーがエンドポイントnginxでの外部接続のプログラミングに失敗しました(d639abcca455cfb2ae23110a56b08732522da0cb64146f7141ca99a8c54704b7):ユーザーランドプロキシの起動中にエラーが発生しました:listen tcp 0.0.0.0:80:listen:アドレスは既に使用されています。

解决:
netstat -tlnp 
查看占用的端口

unix:///var/run/docker.sockのDockerデーモンに接続できません。dockerデーモンは実行されていますか?

解决方案:
查看/etc/docker/daemon.json 这个文件中的 用 {} 括起来

コンテナを実行した後、再起動状態になっています

查看日志
docker logs <容器名称>
可能存在以下问题:
1. 缺少执行文件
2. 执行文件中语法错误

Dockerサービスを開始できませんでした

iptablesが失敗しました:iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -jDNAT…

解決:

cd /etc/systemd/system/multi-user.target.wants
vim docker.service
去掉 After中 的firewalld.service

Afterでfirewalld.serviceを削除します
Dockerを再起動します:

systemctl daemon-loaded 
systemctl start docker

デーモンの起動に失敗しました:ネットワークコントローラーの初期化中にエラーが発生しました:デフォルトの「ブリッジ」ネットワークの作成中にエラーが発生しました:使用可能な重複していないネットワークが見つかりませんでした

解決:

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 dockerDocker構成が見つからないことを確認してください

したがって、サービスDockerを再起動するとsystemctl restart docker、構成情報iptablesが自動的に生成されます。

再度実行する

docker-compose up -d 

問題が解決しました!

Dockerコンテナにrootします(パラメータ-u rootを追加します)

docker exec -it -u root <容器名> bash

おすすめ

転載: blog.csdn.net/qq_22227087/article/details/97379515