查看是否存在具有特定名称的 Docker 容器
See if a Docker Container Exists With a Specific Name
我试图查找是否存在具有特定名称的 Docker 容器,但我似乎没有成功。我从其他帖子中找到了多个答案,最著名的是 一个,但我似乎无法重现他们的成功。他们的回答 returns 在多个状态下尝试使用容器时什么都没有(有时停止,有时 运行),但我似乎无法获得输出。如果容器现在是 运行,它不应该做任何事情。我一直在使用的代码块是:
if [ ! "$(docker ps -q -f name=mysql80)" ]; then
if [ "$(docker ps -aq -f status=exited -f name=mysql80)" ]; then
# cleanup
docker rm mysql80
fi
# run your container
docker run -d -p 3306:3306 -p 33060:33060 --volume "$MYSQLFOLDERLOCATION":/var/lib/mysql --name mysql80 frostedflakez/php-mysql-webserver:0.9-beta.3-mysql-latest-8.0
fi
我希望这段代码能够找到容器,并在容器退出时将其移除。我知道这有时会很危险。我是 运行 macOS 10.15.6 Catalina(最新更新),Docker Desktop 2.3.0.4 (46911)
。
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1300b4021189 frostedflakez/php-mysql-webserver:0.9-beta.3-mysql-latest-8.0 "docker-entrypoint.s…" 6 seconds ago Up 5 seconds 0.0.0.0:3306->3306/tcp, 0.0.0.0:33060->33060/tcp mysql80
4e83c877642b frostedflakez/php-mysql-webserver:0.9-beta.3-php-latest-7.4 "docker-php-entrypoi…" 8 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp php74
^^^ 这是我的 docker ps
输出
你的脚本适合我。首先运行:
> t
Unable to find image 'frostedflakez/php-mysql-webserver:0.9-beta.3-mysql-latest-8.0' locally
0.9-beta.3-mysql-latest-8.0: Pulling from frostedflakez/php-mysql-webserver
...
5e500ef7181b: Pull complete
af7528e958b6: Pull complete
Digest: sha256:ef35b9e2b11b0b42a40205eba89a2b8320ace58a3c073b43e1770a52a044484b
Status: Downloaded newer image for frostedflakez/php-mysql-webserver:0.9-beta.3-mysql-latest-8.0
8b01dd743c554a8fb79d73bccf683097e531e8eeea3af1062e0414b35401a000
>
第二个运行:
> t
>
如果我停止容器,然后 运行 脚本:
> t
deleting mysql80
mysql80
35ca48875efdc60032b00325dd0563da64a834df0074580051c25e0601573180
>
(我添加了一个 echo "deleting mysql80"
只是为了帮助了解发生了什么)
如果我停止并删除容器和 运行 脚本,我得到:
> t
971309690a97d0b2ffb730feb9f19ab03db10df730d19c91c3482a952a9ebb18
>
我 运行正在 Docker version 19.03.12, build 48a66213fe
Mac。
我试图查找是否存在具有特定名称的 Docker 容器,但我似乎没有成功。我从其他帖子中找到了多个答案,最著名的是
if [ ! "$(docker ps -q -f name=mysql80)" ]; then
if [ "$(docker ps -aq -f status=exited -f name=mysql80)" ]; then
# cleanup
docker rm mysql80
fi
# run your container
docker run -d -p 3306:3306 -p 33060:33060 --volume "$MYSQLFOLDERLOCATION":/var/lib/mysql --name mysql80 frostedflakez/php-mysql-webserver:0.9-beta.3-mysql-latest-8.0
fi
我希望这段代码能够找到容器,并在容器退出时将其移除。我知道这有时会很危险。我是 运行 macOS 10.15.6 Catalina(最新更新),Docker Desktop 2.3.0.4 (46911)
。
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1300b4021189 frostedflakez/php-mysql-webserver:0.9-beta.3-mysql-latest-8.0 "docker-entrypoint.s…" 6 seconds ago Up 5 seconds 0.0.0.0:3306->3306/tcp, 0.0.0.0:33060->33060/tcp mysql80
4e83c877642b frostedflakez/php-mysql-webserver:0.9-beta.3-php-latest-7.4 "docker-php-entrypoi…" 8 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp php74
^^^ 这是我的 docker ps
输出
你的脚本适合我。首先运行:
> t
Unable to find image 'frostedflakez/php-mysql-webserver:0.9-beta.3-mysql-latest-8.0' locally
0.9-beta.3-mysql-latest-8.0: Pulling from frostedflakez/php-mysql-webserver
...
5e500ef7181b: Pull complete
af7528e958b6: Pull complete
Digest: sha256:ef35b9e2b11b0b42a40205eba89a2b8320ace58a3c073b43e1770a52a044484b
Status: Downloaded newer image for frostedflakez/php-mysql-webserver:0.9-beta.3-mysql-latest-8.0
8b01dd743c554a8fb79d73bccf683097e531e8eeea3af1062e0414b35401a000
>
第二个运行:
> t
>
如果我停止容器,然后 运行 脚本:
> t
deleting mysql80
mysql80
35ca48875efdc60032b00325dd0563da64a834df0074580051c25e0601573180
>
(我添加了一个 echo "deleting mysql80"
只是为了帮助了解发生了什么)
如果我停止并删除容器和 运行 脚本,我得到:
> t
971309690a97d0b2ffb730feb9f19ab03db10df730d19c91c3482a952a9ebb18
>
我 运行正在 Docker version 19.03.12, build 48a66213fe
Mac。