使用 Docker Compose 时无法使用 GitBash 执行到容器中
Cannot exec into container using GitBash when using Docker Compose
我是 Docker Compose 的新手,但已使用 Docker 多年。下面的屏幕截图是 PowerShell 和 GitBash 的。如果我 运行 没有 docker-compose 的容器,我可以 docker exec -it <container_ref> /bin/bash
这些 shell 中的任何一个都没有问题。
但是,当 运行ning 使用 docker-compose up
时,两个 shell 在尝试使用 docker-compose exec
时都不会报错。他们都只是挂了几秒钟,然后 return 进行提示。
最后,出于某种原因,我在使用我所知道的内容时确实在 GitBash 中遇到错误:docker exec...
。我已经使用它很多年了,所以我很困惑,post 想问一个问题。 Docker Compose 做什么会扰乱 GitBash docker 功能,但不会扰乱 PowerShell?而且,为什么在使用 docker-compose exec...
时挂起,但没有错误?
我在 docker-compose.yml 中使用 tty: true
,但老实说,这似乎没有什么不同。不要在一个 post 中抛出一堆问题,但不管发生了什么,这也可能是我无法在浏览器中仅在使用 Docker Compose to [=33 时访问我的网络服务器的原因=]吗?
version: '3.8'
volumes:
pgdata:
external: true
services:
db:
image: postgres
container_name: trac-db
tty: true
restart: 'unless-stopped'
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
POSTGRES_DB: iol
volumes:
- pgdata:/var/lib/postgresql/data
network_mode: 'host'
expose:
- 5432
web:
image: lindben/trac-server
container_name: trac-server
tty: true
restart: 'unless-stopped'
environment:
ADDRESS: localhost
PORT: 3000
NODE_ENV: development
depends_on:
- db
network_mode: 'host'
privileged: true
expose:
- 1234
- 3000
```
我假设您使用的是 Docker for Desktop and so the reason you can docker exec
just fine using powershell is because for windows docker is a native program\command and for GitBash which is based on bash a linux shell (bash = Bourne-Again SHell) 没那么多。
所以当使用需要 tty 的 windows 命令时,你需要某种“适配器”,例如 winpty
来弥合 docker 的界面和 GitBash 的界面之间的差距一.
这里有关于winpty
更详细的解释
抛开所有这些,如果只尝试使用撰写选项,您最好建议 this question
现在,关于您的 Web 服务问题,我认为您实际上并没有使用 expose 标签公开您的应用程序。看看 docker-compose
expose reference. what you need is to add a "ports" tag like so as referenced here:
db:
ports:
- "5432:5432"
web:
ports:
- "1234:1234"
- "3000:3000"
希望这能解决您的问题 ;)
我是 Docker Compose 的新手,但已使用 Docker 多年。下面的屏幕截图是 PowerShell 和 GitBash 的。如果我 运行 没有 docker-compose 的容器,我可以 docker exec -it <container_ref> /bin/bash
这些 shell 中的任何一个都没有问题。
但是,当 运行ning 使用 docker-compose up
时,两个 shell 在尝试使用 docker-compose exec
时都不会报错。他们都只是挂了几秒钟,然后 return 进行提示。
最后,出于某种原因,我在使用我所知道的内容时确实在 GitBash 中遇到错误:docker exec...
。我已经使用它很多年了,所以我很困惑,post 想问一个问题。 Docker Compose 做什么会扰乱 GitBash docker 功能,但不会扰乱 PowerShell?而且,为什么在使用 docker-compose exec...
时挂起,但没有错误?
我在 docker-compose.yml 中使用 tty: true
,但老实说,这似乎没有什么不同。不要在一个 post 中抛出一堆问题,但不管发生了什么,这也可能是我无法在浏览器中仅在使用 Docker Compose to [=33 时访问我的网络服务器的原因=]吗?
version: '3.8'
volumes:
pgdata:
external: true
services:
db:
image: postgres
container_name: trac-db
tty: true
restart: 'unless-stopped'
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
POSTGRES_DB: iol
volumes:
- pgdata:/var/lib/postgresql/data
network_mode: 'host'
expose:
- 5432
web:
image: lindben/trac-server
container_name: trac-server
tty: true
restart: 'unless-stopped'
environment:
ADDRESS: localhost
PORT: 3000
NODE_ENV: development
depends_on:
- db
network_mode: 'host'
privileged: true
expose:
- 1234
- 3000
```
我假设您使用的是 Docker for Desktop and so the reason you can docker exec
just fine using powershell is because for windows docker is a native program\command and for GitBash which is based on bash a linux shell (bash = Bourne-Again SHell) 没那么多。
所以当使用需要 tty 的 windows 命令时,你需要某种“适配器”,例如 winpty
来弥合 docker 的界面和 GitBash 的界面之间的差距一.
这里有关于winpty
更详细的解释抛开所有这些,如果只尝试使用撰写选项,您最好建议 this question
现在,关于您的 Web 服务问题,我认为您实际上并没有使用 expose 标签公开您的应用程序。看看 docker-compose expose reference. what you need is to add a "ports" tag like so as referenced here:
db:
ports:
- "5432:5432"
web:
ports:
- "1234:1234"
- "3000:3000"
希望这能解决您的问题 ;)