我是Docker Compose的新手,但已经使用Docker很多年了。下面的屏幕截图是PowerShell和GitBash的。如果我运行没有docker-compose的容器,我可以从这两个shell中的任何一个运行docker exec -it <container_ref> /bin/bash
都没有问题。但是,当使用docker-compose up
运行时,两个shell在尝试使用docker-compose exec
时都没有错误。它们都只是挂起几秒钟并返回提示符。最后,由于某种原因,我在使用我所知道的东西时,在GitBash中得到了一个错误:docker exec...
.我已经用了很多年了,所以我很困惑,并提出了一个问题。Docker Compose做了什么,这会扰乱GitBash docker的功能,但不会影响PowerShell?还有,为什么使用docker-compose exec...
时挂起,但没有错误?x1c 0d1x
我在docker-compose.yml中使用了tty: true
,但老实说,这似乎没有什么区别。不要在一篇文章中抛出一堆问题,但无论发生了什么,这是否也是我只能在使用Docker Compose运行时才能在浏览器中访问Web服务器的原因?
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
```
1条答案
按热度按时间ecr0jaav1#
问题说明
我假设你使用的是Docker for Desktop,所以你可以使用PowerShell很好地使用
docker exec
的原因是因为PS和Docker for Desktop都是为Windows构建的,而GitBash基于bash,它不是在Windows中使用的,而是在Linux中使用的,并且基于Linux shell(bash = Bourne-Again SHell)。基础解决方案
因此,当使用需要tty的Windows程序时,您需要某种“适配器”,例如
winpty
,以弥合Docker for Desktop本机接口和GitBash(或Bash)接口之间差距。下面是关于winpty的更详细的说明
更好的解决方案
把这些都放在一边,如果只想使用compose选项,建议使用this question可能更好
后续挂机问题
现在,关于你的Web服务问题,我认为你实际上并没有使用expose标签公开你的应用程序。看看docker-compose expose参考。你需要的是添加一个“ports”标签,如下所示:
希望这能解决你的难题)