给出以下命令:
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文件?
答案 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语法,它将按预期工作。