羊了

前言

因公司项目加班,跟开发、测试同学差点通宵,也不幸羊了,发现周边的人几乎羊了个遍,最后还是没苟住进决赛圈,修整一段时间…

……

阅读全文

git删除历史提交记录

前言

git如果碰到敏感信息提交,需要清理历史提交记录,在不删库的前提下,如何亡羊补牢呢?可以用下面的重写分支操作清理提交历史记录

1、重写分支

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch src/main/resources/demo.txt' HEAD

# 如果出现冲突要增加-f
git filter-branch  -f --index-filter

# 管理reflog信息
git reflog expire --expire=now --all  

# 清理不必要的文件并优化本地存储库
git gc --prune=now  
git gc --aggressive --prune=now

# 强制推送主分支
git push --all --force
……

阅读全文

python多版本管理工具

前言

python多版本管理工具整理介绍

序号 工具名称 安装方式 说明 备注
1 pyenv curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash 比较早出现的 python 多版本管理工具,目前不太活跃了
2 virtualenv pip install virtualenv 通过创建虚拟机方式管理
3 anaconda https://repo.anaconda.com/archive/ 带了很多科学计算包的发行版,包含conda
4 miniconda https://repo.anaconda.com/miniconda/ 不带科学计算包的mini版本,只有python和conda
5 miniforge https://github.com/conda-forge/miniforge miniforge是由社区赞助、领导的,并且用GitHub托管所有的包,使用 (而且只用)conda-forge 作为(默认)下载channel,避开了Anaconda的repository -

1、Conda自身管理

1.1 更新conda

1
2
# 更新anaconda
conda update conda

1.2 更新anaconda元数据包

1
2
# 更新anaconda元数据包
conda update anaconda

2、Python环境管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 创建一个新环境,并制定python解释器版本,没有会自动下载
# python27 是环境名称
# python=2.7 是要安装的包和版本,默认会为我们寻找2.7.x中的最新版本
# anaconda 是创建环境时同时要安装的包,这个可以不写
conda create -n python27 python=2.7 anaconda
conda create -n python36 python=3.6
conda create -n python37 python=3.7
 
# 更新Python,进入某个环境运行下面的命令,将更新当前环境的Python到最新分支版本。比如当前是3.5,更新后将会到最新的3.X
conda update python

3、虚拟环境管理

3.1 查看当前托管的所有虚拟环境列表

1
2
3
4
$ conda env list
# conda environments:
#
base                  *  /root/anaconda3

3.2 创建虚拟环境

1
2
3
# 创建一个名为myvenv 的环境,指定Python版本是3.10
# (不用管是3.10.x,conda会为我们自动寻找3.10.x中的最新版本)
conda create --name myvenv python=3.10

虚拟环境不会在当前环境下创建虚拟环境目录,所有的虚拟环境目录默认放在:/root/anaconda3/envs/

……

阅读全文

springboot常见兼容性错误

前言

springboot日常使用中有一些兼容性的错误,有时候没遇见过会让人无法摸到头脑,这里记录一些问题,后续不定期补充

1、mysql

1.1 Received fatal alert: protocol_version

因为更换了数据源才发现并记录,之前用的是mariadb8正常,换了docker mysql8就报错,不过为了减少无法定位的错建议采用完整的url连接串。

1
2
3
4
5
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 6 milliseconds ago.  The last packet sent successfully to the server was 5 milliseconds ago.

Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version

原因:
spring.database.url连接串需要增加useSSL=false

……

阅读全文

docker修改运行的容器端口

前言

有时候docker容器已经运行了,发现端口占用或者冲突了,不方便删除重新运行容器,可以通过修改配置文件方式来调整端口

1、Linux

1.1 先停止容器

1
docker stop {容器的名称或者id}

1.2 然后查询完整的容器id

1
2
3
4
docker inspect {容器的名称或者id} | grep Id

# 比如如下示例
"Id": "cbe26510c276fa9a4487a8c2af8cbb49410f2a5305149d2b26eb8ce37c777d00"

1.3 打开hostconfig.json配置文件

1
2
3
4
vi /var/lib/docker/containers/{hash_of_the_container}/hostconfig.json

# 比如示例的Id
vi /var/lib/docker/containers/cbe26510c276fa9a4487a8c2af8cbb49410f2a5305149d2b26eb8ce37c777d00/hostconfig.json

1.4 还有不用完整的容器id也可以(可选,跟1.3相同)

1
2
3
4
5
6
cd /var/lib/docker/containers/{hash_of_the_container}*

# 比如示例的
cd /var/lib/docker/containers/cbe26510c276*

vi hostconfig.json

1.5 修改hostconfig.json配置文件

在 hostconfig.json 配置文件中,找到 “PortBindings”:{} 这个配置项,然后进行修改。 HostPort 对应的端口代表 宿主机 的端口。

……

阅读全文

go多版本管理工具

前言

在本地新旧项目并行开发的过程中,你大概率会遇到一个令人头疼的问题,如何同时使用两个不同版本的 Golang Runtime 进行开发呢?

在容器和 CI 流行的当前时代下,我们似乎已经习惯了用 docker run 来切换各种语言的版本,来完成不同项目的开发,基础类型项目的兼容性测试。配合一些支持远程调试的工具,体验似乎也还行。

但是在运行效率和复杂度上,相比本地环境而言,总归是高了那么一丢丢。

……

阅读全文

jenkins的admin密码忘记了如何重置

前言

最近项目比较忙,没时间记录一些日常的心得,慢慢整理一些吧。正好9月份碰到一个交接的项目和服务器,发现服务器占用率很低,找运维重置了密码后登录检查服务,发现部署工具jenkins没人知道admin密码,于是重置了admin密码,记录下步骤

1、删除配置项

找到下面的配置项并注释

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<!-->
  <useSecurity>true</useSecurity>
  <authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
    <denyAnonymousReadAccess>true</denyAnonymousReadAccess>
  </authorizationStrategy>
  <securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
    <disableSignup>true</disableSignup>
    <enableCaptcha>false</enableCaptcha>
  </securityRealm>
<-->

2、重启Jenkins服务

1
2
3
4
5
ps -ef | grep jekins

kill -9 22092

/usr/java/jdk1.8.0_192/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8321 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20 &

3、系统管理

进入首页>“系统管理”>“Configure Global Security”

……

阅读全文

docker网络模式

前言

docker 的网络模式整理

1、查看所有容器的 IP

1
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
/etcd - 172.17.0.6
/minio1 - 172.17.0.2
/getting-started-latest - 172.17.0.3
/nginx1.22.0 - 172.17.0.12
/go-docker-v1 - 172.17.0.9
/java-docker-v1 - 172.17.0.7
/nodejs-docker-v1 - 172.17.0.8
/python-docker-v1 - 172.17.0.4
/mongo6 - 172.17.0.11
/redis7 - 172.17.0.5
/mysql8 - 172.17.0.10

2、查看指定容器的ip网络配置包含网络,ip等

1
docker inspect containerId
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
$ docker inspect b055811ce23c
[
    {
        "Id": "b055811ce23cf53d3b5e2cf193c0cd4a22a5befbf101bdd940662ecbe64ccc2c",
        "Created": "2022-09-06T08:50:31.6648081Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "mysqld"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 2724,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-09-17T12:02:29.756584113Z",
            "FinishedAt": "2022-09-17T12:02:27.248114859Z"
        },
        "Image": "sha256:ff3b5098b416cc4294d8d5c43c2f0f8251e91711347318e73cb290ffe2783bcb",
        "ResolvConfPath": "/var/lib/docker/containers/b055811ce23cf53d3b5e2cf193c0cd4a22a5befbf101bdd940662ecbe64ccc2c/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/b055811ce23cf53d3b5e2cf193c0cd4a22a5befbf101bdd940662ecbe64ccc2c/hostname",
        "HostsPath": "/var/lib/docker/containers/b055811ce23cf53d3b5e2cf193c0cd4a22a5befbf101bdd940662ecbe64ccc2c/hosts",
        "LogPath": "/var/lib/docker/containers/b055811ce23cf53d3b5e2cf193c0cd4a22a5befbf101bdd940662ecbe64ccc2c/b055811ce23cf53d3b5e2cf193c0cd4a22a5befbf101bdd940662ecbe64ccc2c-json.log",
        "Name": "/mysql8",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/Users/Downloads/Docker/mysql/config/my.cnf:/etc/mysql/my.cnf",
                "/Users/Downloads/Docker/mysql/data:/usr/data",
                "/Users/Downloads/Docker/mysql/log:/logs",
                "/Users/Downloads/Docker/mysql/localtime:/etc/localtime"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "bridge",
            "PortBindings": {
                "3306/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "3306"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "always",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "private",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": true,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": [
                "label=disable"
            ],
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": null,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": null,
            "ReadonlyPaths": null
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/262b7fe49ceef30a815f7acd398efd160a8575276a26bd3ed5fe8d03b89c64f5-init/diff:/var/lib/docker/overlay2/f9793fa9c30e39c82416c7664ba9f1bded7164da0eedc04db5f9d34e8ae524bd/diff:/var/lib/docker/overlay2/8bd9971c98c7afafafb6af93fe793eb01881a3e28a25e166cce5037d1867f3a6/diff:/var/lib/docker/overlay2/718e2486037cff064644cfe79f7e0710364ed8b18a2813c501fc921872e154a7/diff:/var/lib/docker/overlay2/d4239c0d55a03ec8e29d9e7a4fcd7aab5f081c4a564eb341d1065f9d0df24429/diff:/var/lib/docker/overlay2/e393d409b7557dac52f8e497f8743ef9663b6037abe9a4edd8cdd66bad9de964/diff:/var/lib/docker/overlay2/1bb134141159fe08fa4dc08b7404e92b103242319663ecee72f5e4aff61c3a40/diff:/var/lib/docker/overlay2/ed42a23c02fe373db201fcc49bf0bd80ee663766ac400aa101163a42ea6ba469/diff:/var/lib/docker/overlay2/d4e972b8eae083ea8c8dc28538c2d92b2e63e4849c348e47783725cbfd42eafa/diff:/var/lib/docker/overlay2/b23c6d2cb95f018ab8ade60d15a40f9bd4eca5568cdae22b10a75b4b22bb8608/diff:/var/lib/docker/overlay2/36e999dce4bab3eee5d5a74b607ee845ebd8b95707222b9f0e57f5d40922b1ce/diff:/var/lib/docker/overlay2/b0f8ffee4114eb3d1797566ab320c34e38e71780e532cadb8d327f03c5a49593/diff",
                "MergedDir": "/var/lib/docker/overlay2/262b7fe49ceef30a815f7acd398efd160a8575276a26bd3ed5fe8d03b89c64f5/merged",
                "UpperDir": "/var/lib/docker/overlay2/262b7fe49ceef30a815f7acd398efd160a8575276a26bd3ed5fe8d03b89c64f5/diff",
                "WorkDir": "/var/lib/docker/overlay2/262b7fe49ceef30a815f7acd398efd160a8575276a26bd3ed5fe8d03b89c64f5/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/Users/Downloads/Docker/mysql/localtime",
                "Destination": "/etc/localtime",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/Users/Downloads/Docker/mysql/config/my.cnf",
                "Destination": "/etc/mysql/my.cnf",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/Users/Downloads/Docker/mysql/log",
                "Destination": "/logs",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/Users/Downloads/Docker/mysql/data",
                "Destination": "/usr/data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "eda1141a1129e17676fc14b6cfedc975c01b8cef030d3042df9543ae0c133ba6",
                "Source": "/var/lib/docker/volumes/eda1141a1129e17676fc14b6cfedc975c01b8cef030d3042df9543ae0c133ba6/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "b055811ce23c",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "3306/tcp": {},
                "33060/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "MYSQL_PASSWORD=test123456",
                "character-set-server=utf8",
                "collation-server=utf8_general_ci",
                "MYSQL_ROOT_PASSWORD=root123456",
                "MYSQL_USER=mysql",
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.14",
                "MYSQL_MAJOR=8.0",
                "MYSQL_VERSION=8.0.30-1.el8",
                "MYSQL_SHELL_VERSION=8.0.30-1.el8"
            ],
            "Cmd": [
                "mysqld"
            ],
            "Image": "mysql:8.0",
            "Volumes": {
                "/var/lib/mysql": {}
            },
            "WorkingDir": "",
            "Entrypoint": [
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "c6b894c6e93f77d1373c596b7e0b739e9077496ae8fd0f9ac4a0e332cd9ff64b",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "3306/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "3306"
                    }
                ],
                "33060/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/c6b894c6e93f",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "632055c898d3becb5e76e5216cd471daed266f115ab84c18dd4f64da4adbf189",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.8",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:08",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "df04e694c73a176ccca94ab55253f9ac8937658faf87c4a23a1215e98c114e28",
                    "EndpointID": "632055c898d3becb5e76e5216cd471daed266f115ab84c18dd4f64da4adbf189",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.8",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:08",
                    "DriverOpts": null
                }
            }
        }
    }
]
$

3、查看容器的ip

1
docker exec -it containerId ip addr
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 类似ip addr命令执行,需要带ip 命令才可以执行,否则会报错,下面样例仅供参考
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:50:56:87:3e:b8 brd ff:ff:ff:ff:ff:ff
    inet 10.10.235.111/24 brd 10.10.235.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe87:3eb8/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:b2:e3:13:75 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:b2ff:fee3:1375/64 scope link 
       valid_lft forever preferred_lft forever
7: vethaaab889@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 8e:8e:10:a1:a0:92 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::8c8e:10ff:fea1:a092/64 scope link 
       valid_lft forever preferred_lft forever
9: veth56dcf1b@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 6e:ac:31:5f:68:32 brd ff:ff:ff:ff:ff:ff link-netnsid 2
    inet6 fe80::6cac:31ff:fe5f:6832/64 scope link 
       valid_lft forever preferred_lft forever
15: veth6e7ba4f@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 22:ba:45:08:19:78 brd ff:ff:ff:ff:ff:ff link-netnsid 4
    inet6 fe80::20ba:45ff:fe08:1978/64 scope link 
       valid_lft forever preferred_lft forever
You have new mail in /var/spool/mail/root

4、docker 的网络模式及区别

4.1 docker的四种网络模式

None — 不为容器进行任何网络配置,容器不能访问外部网络,内部存在回路地址,这个Docker容器没有网卡、IP、路由等信息,只有lo 网络接口。需要我们自己为Docker容器添加网卡、配置IP等。

……

阅读全文

dockerfile

前言

dockerfile学习整理

一、概述

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

官方文档
Dockerfile示例

二、Dockerfile结构

Dockerfile结构主要分为四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令 (CMD/ENTRYPOINT)

【温馨提示】Dockerfile每行支持一条指令,每条指令可携带多个参数(支持&&),支持使用以“#“号开头的注释(jason文件不支持#注释),但是也非必须满足上面的四点。

……

阅读全文

Mac配置docker开发工具

前言

2020年整了一套android下的termux开发环境,今天继续配置一套docker下的开发环境。termux搭建参考

开发电脑环境准备如下:

系统 版本
MacOS 10.14.6
docker 20.10.12

待安装的开发工具环境如下:

镜像 版本
mongo 6.0
redis 7.0
mysql 8.0
nginx 1.22.0
minio latest
etcd latest

1、查询docker进程

1
2
3
launchctl list | grep docker
-	0	com.docker.helper
14047	0	com.docker.docker.47840

2、停止、启动docker进程

1
launchctl stop com.docker.docker.47840 && launchctl start com.docker.docker.47840

3、启动docker

1
open /Applications/Docker.app

PS:

目前通过 open /Applications/Docker.app 可以启动,通过 launchctl start com.docker.docker.xxx 方式不能启动了。

……

阅读全文

最近文章

分类

标签

其它