如何将docker run -it bash命令转换为docker-compose?

时间:2019-02-12 13:09:04

标签: docker docker-compose docker-run

给出以下命令:

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文件?

2 个答案:

答案 0 :(得分:1)

在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

Compose file version 3 reference

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

docker-compose up -d

答案 1 :(得分: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语法,它将按预期工作。