错误:无效参数:./wait-for-it.sh
Posted
技术标签:
【中文标题】错误:无效参数:./wait-for-it.sh【英文标题】:ERROR: Invalid argument: ./wait-for-it.sh 【发布时间】:2019-01-30 19:49:30 【问题描述】:我有以下 docker compose 文件:
version: '3'
services:
my_sql_conatainer_name:
image: percona:latest
container_name: my_sql_conatainer_name
environment:
mysql_ROOT_PASSWORD: password
MYSQL_DATABASE: secret
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10
migration:
image: boxfuse/flyway:latest
container_name: flyway_migration
volumes:
- ./flyway_scripts/src/main/resources/db/migration:/flyway/sql
command: ["./wait-for-it.sh", "mysql:3306", "--", "migrate", "-url=jdbc:mysql://my_sql_conatainer_name:3306/secret?useUnicode=true&characterEncoding=utf8&useSSL=false", "-user=root", "-password=password"]
wait-for-it.sh
文件位于撰写文件附近
当我up
我看到以下错误:
flyway_migration |
我做错了什么?
【问题讨论】:
migration:
容器正在运行什么镜像? docker-compose.yml
中似乎缺少该行。 wait-for-it.sh
的第一个参数看起来也错误,但这不会导致您看到的错误。
@David Maze 更新了话题
@David Maze,第一个参数有什么问题?
应该是数据库服务器的主机:端口,应该是my_sql_percona:3306
。
Docker Hub 上没有 boxfuse/flyway
图像。这是一个定制的镜像吗?你有它的 Dockerfile 吗? (我想知道 (a) 是否有一个 ENTRYPOINT 会弄乱命令行,以及 (b) 图像中是否真的有 wait-for-it.sh
脚本?)
【参考方案1】:
Dockerfile for that image says:
ENTRYPOINT ["flyway"]
CMD ["-?"]
这两个部分连接在一起,您键入的任何参数作为docker run
的参数只会替换CMD
部分。也就是说,实际上您正在运行flyway ./wait-for-it.sh ...
,而flyway
命令不知道如何处理它。
如果你想继续这条路,可能你最简单的下一步是将你自己的自定义图像FROM boxfuse/flyway
和COPY wait-for-it.sh
写入图像,然后添加它自己的入口点脚本来执行wait-for-it
步骤并结束exec flyway "$@"
。
【讨论】:
我是 docker 的新手。你能提供所有细节吗?以上是关于错误:无效参数:./wait-for-it.sh的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:未捕获PDOException:SQLSTATE [HY093]:参数号无效:无参数