使用Docker Compose时无法使用GitBash执行到容器中

4zcjmb1e  于 2023-03-22  发布在  Docker
关注(0)|答案(1)|浏览(125)

我是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
    ```
ecr0jaav

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”标签,如下所示:

db:
    ports:
      - "5432:5432"
web:
    ports:
      - "1234:1234"
      - "3000:3000"

希望这能解决你的难题)

相关问题