質問編集履歴

5

シェルスクリプト内でdockerのバージョンを確認してみた

2023/03/05 15:47

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
File without changes
test CHANGED
@@ -116,7 +116,26 @@
116
116
 
117
117
  ほぼ同じ方法でgit cloneした別環境ではどうなのか、日をまたぎますが試そうと思います。
118
118
 
119
+ ###
120
+ 今回cronで実行しているシェルスクリプトである``database-backup.sh``末尾に
121
+ ```sh
122
+ echo "job done"
123
+ docker -v
124
+ /usr/bin/docker -v
125
+ ```
126
+ の3行を追加してみました。
127
+ ↓結果
128
+ ```bash
129
+ cat /var/log/cron.log
130
+ echo "job done"
131
+ Docker version 23.0.1, build a5ee5b1
132
+ Docker version 23.0.1, build a5ee5b1
133
+ ```
134
+ 「2つのdockerコマンドが独立していてそれぞれのバージョンが異なる」とかはちょっと考えづらいかな?
135
+ って感想です。
119
136
 
137
+ そもそもdockerコマンドがフルパスかどうかで実行されるコマンドが違うなら、
138
+ 「cronではなく手動で実行した時には意図した動作をしていた」ことの説明がつかない気がしてきました。
120
139
 
121
140
  ### 補足情報(FW/ツールのバージョンなど)
122
141
 

4

/usr/local/bin/dockerとは何だったのかの調査

2023/03/05 15:12

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
File without changes
test CHANGED
@@ -96,7 +96,25 @@
96
96
 
97
97
  よって根本解決とは言えないので、「未解決」に戻しました。
98
98
 
99
+ ### 試したこと3(追記)
100
+ `` /usr/bin/docker``と`/usr/local/bin/docker`のバージョン確認
101
+ ```bash
102
+ # /usr/bin/docker -v
103
+ Docker version 23.0.1, build a5ee5b1
99
104
 
105
+ # /usr/local/bin/docker -v
106
+ -bash: /usr/local/bin/docker: No such file or directory
107
+
108
+ #ls /usr/local/bin/
109
+ database-backup.sh
110
+ ```
111
+ 確認方法があっているかわかりませんが、``/usr/local/bin/docker``なんて元々いないんじゃ・・・
112
+ ``/usr/local/bin/``には該当のシェルスクリプトがあるだけでした。
113
+
114
+ これは憶測ですが、WSL2環境なのでWindows側にインストールされているDocker Desktopを参照しようとしたのか?
115
+ などとも考えています。
116
+
117
+ ほぼ同じ方法でgit cloneした別環境ではどうなのか、日をまたぎますが試そうと思います。
100
118
 
101
119
 
102
120
 

3

dockerコマンドが2つ存在することになる?追記しました。

2023/03/05 12:29

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
@@ -1 +1 @@
1
- docker-compose exec db bash -cがcronからだ実行できない(?)
1
+ シェルスクリプト実行時に、dockerコマンドをフルパスで書いたきとそうないとで挙動が異
test CHANGED
@@ -43,7 +43,7 @@
43
43
  * * * * * root /bin/bash /usr/local/bin/database-backup.sh >> /var/log/cron.log 2>&1
44
44
  ```
45
45
 
46
- ### 試したこと
46
+ ### 試したこと1
47
47
  ログを確認しましたが、データベースの接続情報をハードコーディングしないほうがいいぞ、って警告が出てくるだけです。
48
48
  ``cat /var/log/cron.log``
49
49
  ```log
@@ -57,10 +57,47 @@
57
57
  #sqlのデータをコンテナ内の/tmpに書き出し
58
58
  /usr/bin/docker-compose exec -T db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
59
59
  ```
60
- だけがうまく実行できていないように思えます。
60
+ ~~だけがうまく実行できていないように思えます。~~
61
+
62
+ 勘違いでした。追記します。
61
63
 
62
- 何か方法があるのでしょうか。
63
- 知恵を貸ていだきたいです。
64
+ ### 試したこと2(追記)
65
+ 最後の行
66
+ ``docker cp `docker-compose ps -q db`:/tmp/dump.sql ${backupDirectory}/sql/backup_`date +%Y%m%d%H%M`.sql``
67
+ のコマンドをフルパスにしたら意図通りの動きになりました。
68
+
69
+
70
+
71
+ ``/usr/bin/docker cp `docker-compose ps -q db`:/tmp/dump.sql ${backupDirectory}/sql/backup_`date +%Y%m%d%H%M`.sql``
72
+
73
+
74
+
75
+ ```sh
76
+ #!/bin/bash
77
+
78
+ projectDirectory=/root/crm-systrem
79
+ backupDirectory=/tmp/backup
80
+
81
+ export PATH=/usr/local/bin:$PATH
82
+ cd ${projectDirectory}
83
+ /usr/bin/docker-compose exec -T db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
84
+ /usr/bin/docker cp `docker-compose ps -q db`:/tmp/dump.sql ${backupDirectory}/sql/backup_`date +%Y%m%d%H%M`.sql
85
+ ```
86
+
87
+ てっきり下から2行目のコマンド(コンテナ内にいったんバックアップを書き出す)がうまくいっていないとばかり思ってましたがそうではなったということになりますよね。
88
+
89
+ ただ、これだとotnさんがおっしゃるように
90
+ /usr/local/bin/dockerが別物として存在することになりますね。
91
+
92
+ ``which docker``コマンドで調べると、``/usr/bin/docker``との結果が返ってきました。
93
+ ``export PATH=/usr/local/bin:$PATH``をシェルスクリプト冒頭で宣言していて、フルパスじゃない状態でも違う挙動で動いたので、dockerコマンドが2つあるってことですよね。
94
+
95
+ ちょっとこれが何者なのかはまだわかりません。
96
+
97
+ よって根本解決とは言えないので、「未解決」に戻しました。
98
+
99
+
100
+
64
101
 
65
102
 
66
103
  ### 補足情報(FW/ツールのバージョンなど)

2

ログを取得するためのオプションを追加しました。

2023/03/05 10:21

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,7 @@
26
26
  cd ${projectDirectory}
27
27
 
28
28
  #sqlのデータをコンテナ内の/tmpに書き出し
29
- /usr/bin/docker-compose exec db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
29
+ /usr/bin/docker-compose exec -T db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
30
30
 
31
31
  #コンテナ内に書き出したデータを、コンテナ外にコピー
32
32
  docker cp `docker-compose ps -q db`:/tmp/dump.sql ${backupDirectory}/sql/backup_`date +%Y%m%d%H%M`.sql
@@ -44,19 +44,18 @@
44
44
  ```
45
45
 
46
46
  ### 試したこと
47
- ログを確認しましたが、う書き込めていません
47
+ ログを確認しましたが、データベースの接続情報をハードコーディングしないほがいいぞ、って警告が出てるだけです
48
48
  ``cat /var/log/cron.log``
49
49
  ```log
50
- the input device is not a TTY
50
+ mysqldump: [Warning] Using a password on the command line interface can be insecure.
51
51
  ```
52
- ログを取得する方法もあるのかもしれませんが、WSL2環境特有の問題かもしれません。
53
- ちょっそこわからずにいる状態です。
52
+ これは普段成功する出ます。
54
53
 
55
54
  手動でシェルスクリプトを呼び出したときは正しく動作するのに、
56
55
  cronで呼び出すと、
57
56
  ```
58
57
  #sqlのデータをコンテナ内の/tmpに書き出し
59
- /usr/bin/docker-compose exec db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
58
+ /usr/bin/docker-compose exec -T db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
60
59
  ```
61
60
  だけがうまく実行できていないように思えます。
62
61
 

1

誤字修正

2023/03/05 10:09

投稿

bokupiroki
bokupiroki

スコア54

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,7 @@
14
14
  ### 発生している問題・エラーメッセージ
15
15
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-03-05/7f39f3dc-e2c2-4efe-9b88-51fb425ff8d1.png)
16
16
 
17
- 18:30に``/bin/bash /usr/local/bin/database-backup.sh``
17
+ 18:30に``/bin/bash /usr/local/bin/database-backup.sh``
18
18
  を手動で実行しました。
19
19
 
20
20
  シェルスクリプトの中身は下記です。
@@ -32,7 +32,7 @@
32
32
  docker cp `docker-compose ps -q db`:/tmp/dump.sql ${backupDirectory}/sql/backup_`date +%Y%m%d%H%M`.sql
33
33
  ```
34
34
 
35
- 18:30のタイムスタンプで``backup_202303051830.sql``というファイルが、
35
+ 18:30のタイムスタンプで``backup_202303051830.sql``というファイルが、
36
36
  コンテナの外である``\\wsl.localhost\Ubuntu\tmp\backup\sql``に無事生成されました。
37
37
 
38
38
  しかし、このスクリプトをcrondから実行すると、タイムスタンプが過去の時間で中身の更新されていないデータが生成されてしまいます。(上記スクショ参照)