如何在容器中运行服务器并运行cli客户端以使用“docker run”连接它?

How to run server in container and run a cli client to connect it using `docker run`?

提问人:claws 提问时间:11/17/2023 最后编辑:claws 更新时间:11/17/2023 访问量:51

问:

如何在 docker 中运行服务器(mysql 或 redis)并在其中运行 cli 客户端以连接自身。

docker run -it --rm \
--name mysql-container \
-e MYSQL_ROOT_PASSWORD=mypassword \
-p 3307:3306 \
mysql \
mysql -u root -h localhost -P 3306 -p

给出错误:

错误 2002 (HY000):无法通过套接字“/var/run/mysqld/mysqld.sock”连接到本地 MySQL 服务器 (2)

docker run -it --rm \
--name my-redis \
redis \
redis-cli -h localhost

给出错误

无法在 127.0.0.1:6379 连接到 Redis:连接被拒绝

我是docker的新手。我假设它应该运行服务器,然后运行我的客户端命令。但它不起作用。

我错过了什么?

MySQL Docker Redis

评论

0赞 claws 11/17/2023
这些是来自其官方各自官方 docker hub 页面的命令:hub.docker.com/_/postgres & hub.docker.com/_/redis
0赞 David Maze 11/17/2023
因为您有一个选项,所以您可以使用主机系统上的 MySQL CLI 连接到数据库 ;你不需要为此做任何特定于 Docker 的事情。docker run -p 3307:3306mysql -h 127.0.0.1 -P 3307 ...
0赞 claws 11/17/2023
@DavidMaze是的,但我尽量不要在我的主机上安装任何东西。我想运行所有内容,从 withing docker 保持我的系统干净。

答:

1赞 quoc9x 11/17/2023 #1

实际上,在执行登录命令之前,您需要等待 和 在 中完成启动。启动时间取决于许多因素。为了安全起见,我认为您应该在命令之间添加。mysql-serverredis-servercontainersleep

你可以试试这个:

  • 对于MySQL
docker run -d --rm \
--name mysql-container \
-e MYSQL_ROOT_PASSWORD=mypassword \
-p 3307:3306 \
mysql && sleep 5 && \
docker exec -it mysql-container \
bash -c "mysql -u root -h localhost -P 3306 -p"
  • 对于 Redis 也是如此
docker run -d --rm \
--name my-redis \
redis && sleep 5 && \
docker exec -it my-redis \
redis-cli -h localhost

评论

0赞 claws 11/17/2023
谢谢。我已经在这样做了,我想知道为什么我的命令不起作用。
0赞 quoc9x 11/17/2023
哦,是的,我已经为答案添加了解释。