给定以下命令:
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 文件?
给定以下命令:
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 文件?
在 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
最后但并非最不重要的一点是,如果您想在分离模式下运行它,只需将-d
标志添加到 docker-compose 命令:
docker-compose up -d
你不能直接。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 语法的东西,它会按预期工作。