4

给定以下命令:

docker run -dit -p 9080:9080 -p 9443:9443 -p 2809:2809 -p 9043:9043 --name container_name --net=host myimage:latest bash

如何将其转换为等效的 docker-compose.yml 文件?

4

2 回答 2

5

在 docker-compose in -it 中,标志反映如下:

tty: true
stdin_open: true

相当于docker run --net=host是这样的:

services:
  web:
    ...
    networks:
      hostnet: {}

networks:
  hostnet:
    external: true
    name: host

所以你最终的 docker-compose 应该是这样的:

version: '3'
services:
  my_name:
    image: myimage:latest
    container_name: my_name
    ports:
     - "9080:9080"
     - "9443:9443"
     - "2809:2809"
     - "9043:9043"
    command: bash
    tty: true
    stdin_open: true
    networks:
      hostnet: {}

networks:
  hostnet:
    external: true
    name: host

撰写文件版本 3 参考

最后但并非最不重要的一点是,如果您想在分离模式下运行它,只需将-d标志添加到 docker-compose 命令:

docker-compose up -d
于 2019-02-12T13:48:21.590 回答
0

你不能直接。Docker Compose 将启动一些预计或多或少自主运行的容器,并且无法开始在其中一个中输入命令。(如果您有多个想要启动的容器都只是试图启动交互式bash会话,您会怎么做?)

更好的设计是设置您的 Docker 映像,以便其默认 CMD 启动您尝试运行的实际命令。

FROM some_base_image:x.y
COPY ...
CMD myapp.sh

然后你应该能够运行

docker run -d \
    -p 9080:9080 \
    -p 9443:9443 \
    -p 2809:2809 \
    -p 9043:9043 \
    --name container_name \
    myimage:latest

并且您的应用程序应该可以自行成功启动,无需用户干预。这就是你可以直接翻译成 Docker Compose 语法的东西,它会按预期工作。

于 2019-02-12T14:24:01.063 回答