Docker-compose up -d 命令以某种方式覆盖生产标准输入和 tty 设置

Docker-compose up -d command somehow overrides production stdin and tty settings

需要帮助 docker 编写 运行 我的容器,但无法在生产环境中登录。我试图通过覆盖撰写文件标准输入和 tty 设置来实现这一点,但失败了……很多次。

我在 compose 文件中打开了 stdin 和 tty 用于开发(docker-compose.yml):

services:
  web:
    image: some_image
    container_name: my_service_dev
    environment:
     .....
    stdin_open: true
    tty: true

我已经为生产制作了另一个文件并覆盖了一些设置,包括。省略 stdin_open 和 tty (docker-compose-prod.yml).

services:
  web:
    image: some_image
    container_name: my_service_prod
    environment:
....

使用 docker compose 重建图像后

docker-compose -f docker-compose-prod.yml build --no-chache

和运行将它们与

结合起来
docker-compose -f docker-compose-prod.yml up -d

我仍然可以使用 docker exec.

进入这个容器的伪终端

我试图在下次尝试时明确禁用标准输入 (docker-compose-prod.yml)

services:
  web:
    image: some_image
    container_name: my_service_prod
    environment:
     .....
    stdin_open: false
    tty: false

重建它并 运行 得到相同的结果。

然后我假设我的 docker-compose.yml 文件以某种方式被合并到 build/run 设置,所以我将它重命名为 docker-compose- default.yml.

但是,唉,我仍然观察到我的容器 运行s 在生产中打开了标准输入。 docker-compose up -d 是否总是 运行 打开 stdin/tty(听起来 st运行ge 但我觉得我要疯了)? 或者我错过了什么?

docker exec -it my_prod_container bash

这没有连接到容器的标准输入。它在容器内启动第二个 bash 进程。 stdin 与它无关,启用或禁用 [​​=11=] 和 tty 将无效。他们没有关系。

C 的一个类比是关闭标准输入并希望这会阻止 fork() 调用。