打开 Docker 撰写文件中每个服务的外壳选项卡
open a shell tab for each service in a docker compose file
我有一个客户端-服务器(都是用C++编写的(应用程序,我正在使用docker-compose进行管理。我对 docker 技术很陌生,我想知道docker-compose up
是否可以为我完成以下工作:
- 运行服务
- 打开
docker-compose.yml
文件中每个服务的外壳选项卡。
我需要为每个服务提供一个单独的 shell,因为每次我更改代码(在客户端或服务器中(时,我都想停止程序,重新编译并重新运行。目前我使用一种解决方法:
- 运行
docker-compose up
- 运行
docker container ls
以查找容器 ID - 为每个容器打开一个外壳选项卡并运行
docker exec -it <container-id> /bin/bash
我想知道是否有更优雅的解决方案。我正在使用 Ubuntu,这是我的docker-compose.yml
:
version: '3.1'
services:
server:
build: ./server
ports:
- "3500:3500"
volumes:
- ./server/src:/home/src
- ./server/bin:/home/bin
working_dir: /home/src
stdin_open: true
tty: true
client:
build: ./client
ports:
- "2800:2800"
volumes:
- ./client/src:/home/src
- ./client/bin:/home/bin
working_dir: /home/src
stdin_open: true
tty: true
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
您可以使用 Docker 的本机映像系统简化此设置。 通常编译应用程序的指令会内置到Dockerfile
中,所以运行docker-compose up --build
会重新编译东西。 如果应用程序实际上没有更改,Docker 的层缓存系统可以非常快速地运行。 一旦有了它,你就不需要volumes:
来覆盖图像内容,也不需要单独连接到每个容器的交互式 shell。
如果您删除Dockerfile
中或通常不需要的volumes:
和其他一些设置,则会使您的docker-compose.yml
更短
version: '3'
services:
server:
build: ./server
ports:
- "3500:3500"
# volumes: undo what server/Dockerfile does
# working_dir: is the Dockerfile WORKDIR
# server-type processes don't usually need stdin_open: or tty:
client:
build: ./client
ports:
- "2800:2800"
db:
# as above
当您更改某些内容时,您可以运行docker-compose up --build -d
,它将重建并重新启动需要重建和重新启动的特定内容。
许多docker
命令都有直接docker-compose
等效项。 例如,如果您确实需要在容器中使用交互式 shell,则可以
docker-compose exec server /bin/sh
docker-compose exec
将为你查找 Docker 容器 ID,并默认为docker exec -it
标志。
这是我使用 Nginx 的例子
version: '3'
services:
nginx:
stdin_open: true
tty: true
image: nginx
ports:
- "80:80"
使用docker-compose run <SERVICE_NAME> sh
以交互模式进入容器。这是进入 Nginx 容器交互模式的命令
docker-compose run nginx sh
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- 检测win32服务创建和删除的最佳方法
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- gRPC 生成的代码缺少服务实现
- 未达到的情况会影响开关外壳性能
- C# DLL 从C++应用程序调用 SOAP Web 服务
- 在 Winrt/C++ 中使用应用服务
- 将第二个 GATT 服务添加到 Movesense 容器
- 从运行服务的应用程序代码中提取窗口句柄
- 开关:无外壳中断
- 对于使用高级服务的分钟数和应付金额,我不断得到相同的数字
- 通过 Tor 服务C++ socket.io 客户端
- 创建服务失败0x6f7存根收到错误数据
- Windows 后台服务(系统配置文件)无法使用 C++ 访问 win 10 上的用户 appData 文件夹?
- C++序列生成器,按函数外壳具有初始化值
- 打开 Docker 撰写文件中每个服务的外壳选项卡
- 在 Linux 上C++:在作为 systemd 服务运行时侦听键盘输入